如何通过特定列进行限制?
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;
试试 OFFSET
和 FETCH 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
我正在尝试按计数 (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;
试试 OFFSET
和 FETCH 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