sql - 加入求和时限制 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)
解决方案
你只是在寻找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;
推荐阅读
- docker - 由于使用 PowerShell 执行 Dockerfile 构建步骤,使用 Remote-Container 打开文件夹失败
- javascript - Angular UI Boostrap:如何在没有控制器的情况下关闭模式?
- user-interface - 在 GTK3 (gtk-rs) 中用于像素绘图的画布
- ios - 在 SwiftUI 中使用 @EnvironmentObject 和 PresentationButton
- sql - 通过两个不同的变量计算 Smaler Ratio
- angular - 角度分析项目
- html - 如何在 typeScript 上进行拆分
- javascript - NGRX/REDUX:通过 json 路径更新深层对象中的值
- c# - 使用 XmlSchemaSet 在 IIS 上进行 XML 反序列化非常慢(ASP.NET 4.6.2)
- reactjs - 检查按钮在 react-testing-library 中是否被禁用