首页 > 解决方案 > 加入求和时限制 SQL 中返回的行的最佳方法

问题描述

我需要取回用户列表和他们订购的总金额。实际上,我的查询更复杂,但我认为这总结了它。我的问题是,例如,如果用户下了 5 个订单,我将取回他们的姓名以及由于加入而订购了 5 次的总数(该用户的订单表中有 5 行)。

当您需要汇总一个具有多行而不需要返回多行的表中的记录时,推荐的方法是什么?不同的可以工作,但这是最好的吗?(尤其是当我的选择选择的信息比下面的更多时)

SELECT user.name, sum(order.amount) FROM USER user
    INNER JOIN USER_ORDERS order
       ON (user.user_id = order.user_id)

标签: sqloracle

解决方案


你只是在寻找GROUP BY吗?

SELECT u.name, SUM(o.amount)
FROM USER u JOIN
     USER_ORDERS uo
     ON u.user_id = uo.user_id
GROUP BY u.name, u.user_id;

请注意,这已包含user_id在 中GROUP BY,以防两个用户具有相同的名称。

如果您想要所有用户,即使是没有订单的用户,那么您需要一个LEFT JOIN

SELECT u.name, SUM(o.amount)
FROM USER u LEFT JOIN
     USER_ORDERS uo
     ON u.user_id = uo.user_id
GROUP BY u.name, u.user_id;

或相关子查询:

SELECT u.name,
       (SELECT SUM(o.amount)
        FROM USER_ORDERS uo
        WHERE u.user_id = uo.user_id
       )
FROM USER u;

推荐阅读