【问题标题】:numer location in group by order by sql按 sql 顺序分组中的数字位置
【发布时间】:2021-05-30 08:20:44
【问题描述】:

假设我有一张桌子

number class
1 a
10 a
3 b
6 a
2 b
70 b

在sql中有没有一种方法可以对按类分组的数字排序的每一行的位置进行编号。

所以想要的答案是

number class placement
1 a 1
6 a 2
10 a 3
2 b 1
3 b 2
70 b 3

例如:

SELECT *,xxxxx
FROM MyTable
GROUP BY class
ORDER by number

什么时候执行的表会像上面提到的那样

【问题讨论】:

  • 您使用的是哪个 dbms。

标签: sql group-by sql-order-by


【解决方案1】:

你可以用 row_number() 来做:

SELECT number,class,row_number()over(partition by class order by number) Placement
FROM MyTable

如果您使用的是任何不支持row_number()over()的旧版本数据库,那么您可以通过子查询来实现:

select *,(select count(*) from rowNumberForOldDB where class=t.class and 
       number<t.number)+1 Placement from rowNumberForOldDB t

【讨论】:

  • row_number() 是标准 SQL。确实没有必要列出支持它的数据库,但如果你这样做了,那么列表会比这长得多。
  • 我同意。感谢您的关心。再次感谢。
【解决方案2】:

如果你使用mysql,你可以这样做:

SET @num := 0;
SELECT t.*, @num := @num + 1 AS 'row_num' FROM (
    SELECT * FROM table 
    GROUP BY field_a 
    ORDER BY field_b
) t

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-26
    • 2021-12-17
    • 2013-09-13
    • 2011-05-18
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多