mysql - 如何多次连接表以获取交易中每种类型的计数

标签 mysql sql

我的 table 是

交易表

        transaction_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        customer_id INT,
        inventory_id INT,
        kiosk_id INT,
        rental_out DATETIME,
        rental_proposal INT, 
        rental_due DATETIME,
        rental_cost FLOAT,
        rental_in DATETIME,
        rental_period INT,
        rental_past_due INT,
        late_fee INT

库存表

    inventory_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    title_id INT,
    title_name VARCHAR(255),
    genre_id INT,
    genre_name VARCHAR(255),
    qty INT

我正在尝试找出一种方法来创建一个查询,允许交易表中的 inventory_id 创建每个交易的流派计数。我的查询允许查找已交易的流派数量,但一次只能查找一个流派。

SELECT COUNT(genre_id) 
FROM inventory 
INNER JOIN transactions 
ON inventory.title_id = transactions.inventory_id 
WHERE transactions.customer_id = 1 and inventory.genre_id = 1;

我想想办法多次加入表格以显示每个流派被租用的次数,目前存在流派 1、2、3、4、5、6

到目前为止,我已经提出了这些问题,但我没有看到解决方案的合乎逻辑的方法。

SELECT COUNT(A.genre_id) as GENRE_A, COUNT(A.genre_id) as GENRE_B, COUNT(A.genre_id) as GENRE_C FROM inventory A 
INNER JOIN transactions D ON A.title_id = D.inventory_id 
INNER JOIN transactions E ON A.title_id = E.inventory_id 
INNER JOIN transactions F ON A.title_id = F.inventory_id 
WHERE A.genre_id = 1 AND A.genre_id = 2 and A.genre_id = 3;

SELECT COUNT(A.inventory_id), COUNT(B.inventory_id), COUNT(C.inventory_id) FROM transactions A, transactions B, transactions C
INNER JOIN inventory D ON A.inventory_id = D.title_id
INNER JOIN inventory E ON A.inventory_id = E.title_id
INNER JOIN inventory F ON A.inventory_id = F.title_id
WHERE A.genre_id = 1 AND B.genre_id = 2 and C.genre_id = 3;

我尝试了多种变体,其中一些我已经删除但没有发布,但我似乎无法弄清楚。有什么解决办法吗?任何帮助将不胜感激。谢谢!

最佳答案

只需使用条件聚合。 只需要 1 个加入。

这将计算 3 种类型的交易

SELECT
-- trans.customer_id,
COUNT(CASE WHEN inv.genre_id = 1 THEN trans.transaction_id END) AS genre1, 
COUNT(CASE WHEN inv.genre_id = 2 THEN trans.transaction_id END) AS genre2, 
COUNT(CASE WHEN inv.genre_id = 3 THEN trans.transaction_id END) AS genre3
FROM transactions trans
JOIN inventory inv ON inv.inventory_id = trans.inventory_id
WHERE inv.genre_id IN (1, 2, 3)
-- GROUP BY trans.customer_id

关于mysql - 如何多次连接表以获取交易中每种类型的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53801488/

相关文章:

php - 仅使用 php 备份和恢复 mysql 转储的最佳方法是什么?

c# - 如何配置多对一关系?

Cron 作业在 MySQL 表之间移动多行

mysql - mysql如何让条件或条件优先于其他条件?

mysql - 如何在mysql中获得第二高薪员工

sql - TSQL 连接查询

sql - TSQL - 不使用循环写入 FIZZBUZZ

java - 在java中以26个字符格式读取db2时间戳?毫秒的最后一个字符丢失

php - 如何删除数据库中不存在的文件

php - 如何在 mysql 中创建自动更新时间字段?