1

我试图通过计数(to_state)限制前 20 个州。但是,limit 命令受服务栏(发货方式)的限制。我试过谷歌搜索,我能发现的唯一答案是一个偏移命令,但我不确定如何正确实现它。对 SQL 初学者有什么建议吗?

select to_state,
       count(to_state),
       service
  from uscount
group by 1, 3
order by sum(count(*)) over (partition by to_state) desc, to_state, service
limit 20

在此处输入图像描述

4

2 回答 2

2

问题是limit限制了数。但是一个州的数据在多行上。您想要 20 个州,但不知道那是多少行。

您可以使用dense_rank()获得前 20 个州来解决此问题。然后过滤在where子句中:

select to_state, cnt, service
from(select ss.*,
            dense_rank() over (order by state_count desc, to_state) as seqnum
     from (select to_state, count(*) as cnt, service,
                  sum(count(*)) over (partition by to_state) as state_count
           from uscount
           group by 1, 3
          ) ss
     ) ss
where seqnum <= 20
order by state_count, to_state, service;
于 2021-05-21T13:50:36.343 回答
0

尝试OFFSETFETCH NEXT...

询问:

SELECT 
    to_state,
    count(to_state),
    service
FROM
    uscount
GROUP BY 1, 3
ORDER BY SUM(COUNT(*)) OVER (PARTITION BY to_state) DESC, to_state, service
OFFSET 0 ROW
FETCH NEXT 20 ROWS ONLY
于 2021-05-21T13:50:53.673 回答