【问题标题】:MySQL JOIN and COUNT in single queryMySQL JOIN 和 COUNT 在单个查询中
【发布时间】:2011-08-18 03:59:29
【问题描述】:

我正在尝试将 2 个表连接在一起并计算外键的数量... 对不起,我真的不知道如何解释自己,所以让我演示一下:

我有 1 个订单表“订单”,其中包含以下字段:

id, f_name, l_name, credit_card, ETC.

然后,我有一个订单中的商品的“orders_details”表,如下所示:

id, order_id, product_id, qty

现在,我想运行一个查询连接 2 个表,在 orders 表中的每一行获取 1 行,并有一列告诉我每个订单中有多少产品。

有人知道如何实现吗?

附:我还希望能够获得订单的所有“数量”的总数(我不想为每个订单运行单独的查询)。

【问题讨论】:

    标签: mysql sql join left-join


    【解决方案1】:
    SELECT o.id, o.f_name, o.l_name, COUNT(od.id), COALESCE(SUM(od.qty), 0)
    FROM orders o
    LEFT JOIN order_details od ON o.id = od.order_id
    GROUP BY o.id, o.f_name, o.l_name
    

    【讨论】:

    • @John 请记住,如果您将更多列添加到 SELECT 子句,您还需要将它们添加到 GROUP BY
    • @John:实际上在 MySQL 中,您不必在 GROUP BY 中包含所有非聚合列/表达式。 MySQL 允许您使用精简的 GROUP BY,您只需要包含唯一定义您选择的所有其他非聚合数据的键列或表达式。我仍然认为 Phil 的建议值得遵循,因为大多数其他 RDBMS 不支持精简的 GROUP BY,谁知道你是否会决定开始学习和使用另一种 SQL 方言。
    猜你喜欢
    • 1970-01-01
    • 2012-01-28
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多