[英]MySQL groupby with rollup and orderby based on aggregated column
[英]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.