我发现很难在以下数据库模式上构建SQL,
购物 id
名称
id
shop_id
日期
量
你可以看到一个商店可以有很多订单。我想建立一个SQL,给出每个商店在特定日期的订单数量。所以WHERE部分必须是(例如2011-7-13),
订单。日期= '2011-7-13'
我想不出SELECT部分应该是什么样的。我认为COUNT(*)应该用,但这是我现在脑子里的全部。
谁能给点提示吗?谢谢大家。
试试这个:
SELECT a.id, a.name, COUNT(1) AS order_count
FROM Shop a INNER JOIN Order b
ON a.id = b.shop_id
WHERE `date` = '2011-7-13'
GROUP BY a.id, a.name
SELECT Shop.name, COUNT(*) AS Num_Orders
FROM Shop JOIN `Order` ON Shop.id = `Order`.id
WHERE DATE(`Order`.`date`) = '2011-7-13'
GROUP BY `Order`.id;
注意,如果date
是DATETIME
列,我使用DATE()
函数只返回它的日期部分,而不是时间。
您可能必须像上面那样用反引号引用date
和Order
,因为它们是保留的MySQL关键字。也许不是date
,但几乎可以肯定Order
。
try this:
SELECT COUNT(Order.id), Shop.name, Order.date
FROM Shop INNER JOIN Order ON Shop.id=Order.shop_id
WHERE Order.date = '$date'
GROUP BY Shop.name, Order.date
ORDER BY Order.date
我在结果中包含了日期以进行验证。
经过一番考虑(以及@AJ当之无愧的评论),以下是我的(修改后的)答案。
SELECT shop.id, shop.name,
FROM shop
JOIN (SELECT shop_id, date, COUNT(*)
FROM order
WHERE date = :date
GROUP BY shop_id, date) as order_count
ON order_count.shop_id = shop.id
如果您想要按日期列出所有订单计数,请删除内部WHERE
子句。