如何在多表关联分组查询中筛选SUM(price)超指定值的行?
过滤聚合后的SUM结果
你现在的查询已经完成了分组求和并排序,但要筛选出SUM(price)超过特定数值的行,需要用**HAVING子句**——因为WHERE子句只能在分组前过滤原始行,不能直接使用聚合函数(比如SUM())作为过滤条件,而HAVING是专门用来对分组后的结果进行过滤的。
修改后的SQL示例
假设你想要筛选总和超过100的记录,可以这样写:
select customers.name, SUM(items.price) as "price" from items INNER JOIN purchases ON items.id = purchases.item_id INNER JOIN customers ON purchases.customer_id = customers.id GROUP BY customers.name HAVING SUM(items.price) > 100 -- 替换成你需要的阈值 ORDER BY "price"
如果你的数据库支持在HAVING中使用别名(比如PostgreSQL、MySQL在特定模式下),也可以简化成:
select customers.name, SUM(items.price) as "price" from items INNER JOIN purchases ON items.id = purchases.item_id INNER JOIN customers ON purchases.customer_id = customers.id GROUP BY customers.name HAVING "price" > 100 ORDER BY "price"
对应你的结果示例
用上面的阈值(>100),最终会得到以下结果:
"Michael Adam" "101.29"
"Jose Salvatierra" "899.00"
"Rolf Smith" "1174.50"
你只需要把100替换成你实际想要的数值即可。
内容的提问来源于stack exchange,提问作者Eduard
相关产品推荐
相关产品推荐

