【问题标题】:Sql limit record groupedsql限制记录分组
【发布时间】:2020-07-17 17:01:57
【问题描述】:

我有一张“玩家”表 在此表中,列是'ID','surname','nation' 我需要一个查询,结果必须显示一个由国家限制为 4 个国家的玩家列表 前任 桌面玩家

ID   surn.. nation
1    Garcia   spa
2    smith    gbr
3    rossi    ita
4    villa    spa
5    renoir   fra
6    muller   ger
7    conti    ita
8    johnson  usa
9    james    gbr
10   lopez    spa
11   dubois   fra
12   petit    fra
13   popov    rus
14  rodriguez spa
15   weber    ger
16   ivanov   rus
17  gonzales  spa
18   wagner   ger
19   bruni    ita
20   Smirnov  rus
21   white    gbr
22   schmidt  ger
23  Armstrong usa
24    green   gbr
25   Schulz   ger 

结果集

Nation| surname-
Spa |Garcia-
Spa| villa-
Spa| lopez-
Spa |rodriguez-
Gbr |smith-
Gbr |james-
Gbr| white-
Gbr| green -
Ita| rossi-
Ita |conti-
Ita |bruni-
Fra |renoir-
Fra| dubois-
Fra| petit-
Ger |muller-
Ger| weber-
Ger| wagner-
Ger |schmidt-
Usa |johnson -
Usa |armstrong-
Rus| popov-
Rus |ivanov-
Rus |Smirnov -

【问题讨论】:

    标签: sql sqlite group-by limit


    【解决方案1】:

    带有row_number()窗口功能:

    select t.nation, t.surname
    from (
      select *,
        row_number() over (partition by nation order by id) rn
      from players
    ) t
    where t.rn <= 4
    order by t.nation, t.id
    

    请参阅demo
    或者如果您的 SQLite 版本不支持窗口函数:

    select t.nation, t.surname
    from (
      select p.*,
        (select count(*) + 1 from players where nation = p.nation and id < p.id) rn
      from players p
    ) t
    where t.rn <= 4
    order by t.nation, t.id
    

    请参阅demo
    结果:

    | nation | surname   |
    | ------ | --------- |
    | fra    | renoir    |
    | fra    | dubois    |
    | fra    | petit     |
    | gbr    | smith     |
    | gbr    | james     |
    | gbr    | white     |
    | gbr    | green     |
    | ger    | muller    |
    | ger    | weber     |
    | ger    | wagner    |
    | ger    | schmidt   |
    | ita    | rossi     |
    | ita    | conti     |
    | ita    | bruni     |
    | rus    | popov     |
    | rus    | ivanov    |
    | rus    | Smirnov   |
    | spa    | Garcia    |
    | spa    | villa     |
    | spa    | lopez     |
    | spa    | rodriguez |
    | usa    | johnson   |
    | usa    | Armstrong |
    

    【讨论】:

    • 错误继续存在
    • 你的 SQLite 版本是多少?
    • Sqlite db浏览器V2.2
    • 运行此查询:select sqlite_version();,您将获得版本。
    • 查看我编辑的答案以及另一个不支持窗口函数的 SQLite 查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多