自学 sql 中,遇到了一个问题,请教大家:如何在以下 query 里显示排名 3-5 的国家?

2020-06-09 06:56:42 +08:00
 oooolongtea
我在这个网站上训练自己对 query 的理解:
https://sqlzoo.net/wiki/SELECT_basics

我想知道,如何显示在“Asia”里,“population” 排名 3-5 名的国家?
3582 次点击
所在节点    MySQL
16 条回复
MarsBar
2020-06-09 07:14:23 +08:00
window function 了解一下

row_number() / rank() over (partition by continent order by population asc/desc)
MarsBar
2020-06-09 07:15:43 +08:00
然后就可以在外面再套一层选择 where row_number/rank >=3 and <=5

具体是用 row_number, rank or dense_rank 看你的需求了
MarsBar
2020-06-09 07:16:41 +08:00
哦 外层条件别忘了 continent = 'Asia'
netnr
2020-06-09 07:42:14 +08:00
SELECT
*
FROM (
SELECT
name,
row_number() OVER (ORDER BY population DESC) AS nid
FROM
world
WHERE
continent = 'Asia') T
WHERE
nid BETWEEN 3 AND 5
aijam
2020-06-09 08:11:04 +08:00
select * from world where continent = "Asia" order by population desc limit 3 offset 2;
carryer
2020-06-09 08:19:24 +08:00
SELECT * FROM world WHERE continent = 'Asia' ORDER BY population LIMIT 2,3;
JieS
2020-06-09 08:23:44 +08:00
@carryer 倒序排列后 limit 靠谱
xuanbg
2020-06-09 08:42:40 +08:00
5 楼,6 楼正解
oooolongtea
2020-06-09 12:27:26 +08:00
@aijam @carryer 谢谢 我用了你们的 query,遇到了这个错误: “Incorrect syntax near 'LIMIT'.”

@netnr 你的 query 可以跑,谢谢!
cryboy007
2020-06-09 12:36:06 +08:00
可以先排序,然后 limit offer
AmberJiang
2020-06-09 15:27:04 +08:00
窗口函数了解一下 谢谢
nnd
2020-06-09 15:38:18 +08:00
不知道这个玩意支持的 SQL 标准,MySQL/PG 通常用 limit,offset,ORACLE 用 rownum, 窗口函数 ORACLE,PG 支持
sarices
2020-06-09 15:43:25 +08:00
@aijam
@carryer
并列排名的就不适合了
oooolongtea
2020-06-10 02:45:52 +08:00
@netnr “row_number() OVER (ORDER BY population DESC) AS nid” 这里的逻辑是不是把每个 row 都标记成一个 nid,然后你最后用 nid 进行排序?
netnr
2020-06-10 06:31:37 +08:00
是的,按照指定排序并标记序号,然后按标记序号取
carryer
2020-06-10 09:47:46 +08:00
@sarices 对,LIMIT 无法处理并列排名。
@oooolongteahttps://sqlzoo.net/wiki/SELECT_basics 试用没出现错误提示,MySQL 类的才支持 LIMIT 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/679847

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX