簡體   English   中英

如何在mysql中基於聚合列添加等級列?

[英]How can I add a rank column based on an aggregated column in mysql?

我想添加一個等級列,以指示使用MySQL的SQL查詢中另一個數字列的等級。 對於簡單的非聚合查詢,可以使用以下計數器變量來實現:

SELECT value, @i:=@i+1 as rank FROM table, (SELECT @i:=0) rank_init ORDER BY value DESC

之前在此處和SO的其他地方對此進行了描述。

但是,如果value是聚合函數的結果(因此,結果由聚合值排序),則在應用排序之前似乎已添加了rank列,當然也跳過了值。

SELECT sum(value), @i:=@i+1 as rank FROM table, (SELECT @i:=0) rank_init GROUP BY other_field ORDER BY value DESC

有沒有不使用臨時表或子查詢的另一種方法?

使用子查詢:

SELECT value, (@i := @i + 1) as rank
FROM (SELECT sum(t.value) as value
      FROM table 
      GROUP BY other_field
     ) t CROSS JOIN
     (SELECT @i := 0) rank_init
ORDER BY value DESC;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM