如何通过特定列进行限制?

How to limit by specific column?

我正在尝试按计数 (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

问题是 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;

试试 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