我有一张这样的桌子
CREATE TABLE `purchases` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`totalAmount` INT(10) NOT NULL DEFAULT '0',
`purchaseDate` DATETIME NOT NULL,
PRIMARY KEY (`id`)
)
以及另一个存储所有购买细节的表(如行项目)
CREATE TABLE `purchase_items` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`purchaseId` INT(10) NOT NULL,
`itemId` INT(10) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
FOREIGN KEY (`purchaseId`) REFERENCES purchases(id)
)
我用这种方法得到任何一天的总购买量
SELECT DATE_FORMAT(purchaseDate, '%m-%d-%Y') AS date,
COUNT(id) AS totalPurchases
FROM purchases
GROUP BY DATE(purchaseDate)
这给了我这样一个结果
date totalPurchases
11-18-2010 5
11-19-2010 10
11-20-2010 10
我将如何执行查询,以便它返回如下内容
date totalPurchases totalItems
11-18-2010 5 20
11-19-2010 10 30
11-20-2010 10 25
因此,我仍将按日期分组,但我需要对“采购物品”执行联接,并获取链接到
2010年11月18日购买5件
2010年11月19日购买10件
2010年11月20日购买10件
最佳答案
使用:
SELECT DATE_FORMAT(p.purchasedate, '%m-%d-%Y'),
COUNT(p.id) AS totalPurchases,
COUNT(pi.itemid) AS totalItems
FROM PURCHASES p
JOIN PURCHASE_ITEMS pi ON pi.purchaseid = p.id
GROUP BY DATE_FORMAT(p.purchasedate, '%m-%d-%Y')
如果可能与采购物品表没有关系,请使用:
SELECT DATE_FORMAT(p.purchasedate, '%m-%d-%Y'),
COUNT(p.id) AS totalPurchases,
COUNT(pi.itemid) AS totalItems
FROM PURCHASES p
LEFT JOIN PURCHASE_ITEMS pi ON pi.purchaseid = p.id
GROUP BY DATE_FORMAT(p.purchasedate, '%m-%d-%Y')
关于mysql - 分组依据并获取1对多表的计数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4253103/