我正在尝试编写一个查询,该查询将返回每个提供债务人名称和净总额的州的前5名销售额.我已经提出了以下工作,但是,我确信有更好的方法,特别是如果添加了新的国家.
我试图理解WHERE IN语法,但不是我没有得到它.我很感激你的帮助.
SELECT TOP 5 data.DebtorNameShort, data.State, data.NetTotal
FROM data
WHERE State= "VI"
ORDER BY NetTotal DESC
UNION ALL
SELECT TOP 5 data.DebtorNameShort, data.State, data.NetTotal
FROM data
WHERE State= "NS"
ORDER BY NetTotal DESC
UNION ALL
SELECT TOP 5 data.DebtorNameShort, data.State, data.NetTotal
FROM data
WHERE State= "sa"
ORDER BY NetTotal DESC
UNION ALL
SELECT TOP 5 data.DebtorNameShort, data.State, data.NetTotal
FROM data
WHERE State= "wa"
ORDER BY NetTotal DESC
UNION ALL
SELECT TOP 5 data.DebtorNameShort, data.State, data.NetTotal
FROM data
WHERE State= "ta"
ORDER BY NetTotal DESC
UNION ALL
SELECT TOP 5 data.DebtorNameShort, data.State, data.NetTotal
FROM data
WHERE State= "ac"
ORDER BY NetTotal DESC
UNION ALL
SELECT TOP 5 data.DebtorNameShort, data.State, data.NetTotal
FROM data
WHERE State= "ql"
ORDER BY NetTotal DESC
UNION ALL SELECT TOP 5 data.DebtorNameShort, data.State, data.NetTotal
FROM data
WHERE State= "nt"
ORDER BY NetTotal DESC;
Run Code Online (Sandbox Code Playgroud)
基于TOP语法,我猜您正在使用SQL Server.您应该能够使用row_number()返回每个州的前5个值:
select DebtorNameShort, State, NetTotal
from
(
select DebtorNameShort, State, NetTotal,
row_number() over(partition by state order by NetTotal desc) seq
from data
) d
where seq <= 5
Run Code Online (Sandbox Code Playgroud)
row_number()是一个窗口函数,它允许为分区中的每个项创建一个顺序值 - 例如,您将通过分区对数据进行分区state.只要您按NetTotal降序排序,那么您可以过滤最终结果,只返回那些行数为1-5的行.
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |