构建一个SQL来计算与父节点相关的行数



我发现很难在以下数据库模式上构建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;

注意,如果dateDATETIME列,我使用DATE()函数只返回它的日期部分,而不是时间。

您可能必须像上面那样用反引号引用dateOrder,因为它们是保留的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子句。

相关内容

  • 没有找到相关文章

最新更新