如何编写最短SELECT语句获取MyOrders表中订单数≥10的用户列表
正确的最短SQL语句
你尝试的语句存在两个问题:一是表中没有名为orders的字段,二是要统计用户的订单数,需要先分组再做聚合过滤。
能实现需求的最短SELECT命令是:
SELECT user_id FROM MyOrders GROUP BY user_id HAVING COUNT(*) >= 10;
简单说明
GROUP BY user_id:按用户ID分组,把同一个用户的所有订单归为一组COUNT(*):统计每组内的订单数量(如果order_id不会为空,用COUNT(order_id)效果完全一致)HAVING COUNT(*) >=10:过滤出订单数量≥10的分组,这里必须用HAVING而非WHERE,因为WHERE无法过滤聚合计算后的结果
如果追求极致简短,还可以写成:
SELECT user_id FROM MyOrders GROUP BY 1 HAVING COUNT(*)>=10;
这里GROUP BY 1代表按SELECT子句中第1个字段(也就是user_id)分组,语法合法但可读性稍差。
内容的提问来源于stack exchange,提问作者Pablo Rubio
相关产品推荐
相关产品推荐

