sql - SQL 显示计数中的第一个和最后一个值
问题描述
我需要编写一个查询来显示客户订单的最大和最小订单数。
我试过了:
(SELECT TOP 1 CustomerID, COUNT(*) AS Number_Of_Orders
FROM Orders
GROUP BY CustomerID
ORDER BY COUNT(*) ASC)
UNION ALL
(SELECT TOP 1 CustomerID, COUNT(*) AS Number_Of_Orders
FROM Orders
GROUP BY CustomerID
ORDER BY COUNT(*) DESC)
但是我没有成功合并输出,我得到了错误Incorrect syntax near the keyword 'ORDER'
。
我怎么能得到那个?
解决方案
我不确定我是否要运行两次聚合,所以使用窗口函数:
SELECT CustomerID, Number_Of_Orders
FROM (SELECT CustomerID, COUNT(*) AS Number_Of_Orders,
ROW_NUMBER() OVER (ORDER BY COUNT(*) ASC) as seqnum_asc,
ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) as seqnum_desc
FROM Orders
GROUP BY CustomerID
) c
WHERE seqnum_asc = 1 OR seqnum_desc = 1;
推荐阅读
- bash - 从 bash 中的输入文本文件中解析我的匹配模式的特定字符串
- javascript - 使用点击处理程序修改段落的 JavaScript 类
- scala - 重写抽象类型成员
- c# - 使用 dotnet core 2.1 在 AWS Lambda 函数中进行依赖注入
- android - 如何淡化文本视图的某些字符?
- python - 为什么当客户端断开连接时,`select()` 会将客户端返回为可写的?
- python - 房屋贷款负担能力计算器?
- google-cloud-platform - 从本地主机到本地主机没有密码的gcp ssh连接失败
- angular - 如何验证具有材料形式字段的角度形式?
- javascript - 获取和显示时间线数据