Sql 如何按具体列进行限制?

Sql 如何按具体列进行限制?,sql,periscope,Sql,Periscope,我试图通过countto_state限制前20个州。但是,limit命令受到服务列装运方法的限制。我尝试过谷歌搜索,我能找到的唯一答案是一个offset命令,但我不确定如何正确实现它。对SQL初学者有什么建议吗 select to_state, count(to_state), service from uscount group by 1, 3 order by sum(count(*)) over (partition by to_state) desc, t

我试图通过countto_state限制前20个州。但是,limit命令受到服务列装运方法的限制。我尝试过谷歌搜索,我能找到的唯一答案是一个offset命令,但我不确定如何正确实现它。对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
问题是限制行的数量。但一个状态的数据位于多行上。您需要20个状态,但不知道这是多少行

您可以使用稠密排名来获得前20个州。然后过滤在where子句中:

尝试使用偏移量并获取下一个

查询:

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

用您正在使用的数据库标记您的问题。将样本数据和预期结果标记为数字会有所帮助,谢谢,我想我做对了。这工作做得很好,很好。这显示了我在其他地方可以使用的很多东西。
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