簡體   English   中英

如何使查詢按DESCENDING順序按一組值添加排名

[英]How to have a query add a ranking by a group of values in DESCENDING order

我有一張視頻表

表格 :“ id”,“ video_key,“ week”

:(1,12345,2016-01-03),(2,23456,2016-01-03),(3,3456,2015-01-03),等等...

“周”總是會有些周日日期,並在“周”可以有任意數量的視頻。

我正在嘗試提出一個查詢,該查詢按“周” DESC排序視頻,並具有降序降級 ?)的排名。 我可以使用以下內容以遞增的順序獲取視頻-但這不是我需要的結果。

  SELECT tt.*, rank FROM ( SELECT t.*, @week:=
    CASE WHEN @week = week
    THEN  @rank:=@rank +1
    ELSE @rank:=1
    END  rank,
  @week:=t.week
  FROM video_table t ,
    (SELECT @rank:=0,@week:=0) r
  ORDER BY week DESC, id ASC
  ) tt

這返回類似

[id,video_key,week,rank,...]
1,12345,2016-01-03,1,..
2,23456,2016-01-03,2,..
3,3456,2016-01-03,3,....

但是我實際上需要它

[id,video_key,week,rank,...]
3,3456,2016-01-03,1,..
2,23456,2016-01-03,2,..
1,12345,2015-01-03,3

我的想法是,我需要進行子查詢以獲取每周的視頻數(*),然后執行以下操作:

CASE WHEN @week = week
THEN  @weekly_count_of_videos:=@weekly_count_of_videos -1
//....etc

我希望這一切都說得通....感謝您提出的任何提示或指點。

基於戈登·利諾夫的答案的更新查詢

SELECT t3.* FROM
(SELECT t2.* FROM ( SELECT t1.*, @week:=
    CASE WHEN @week = week
    THEN  @rank:=@rank +1
    ELSE @rank:=1
    END  rank,
  @week:=t1.week
  FROM video_table t1 ,
    (SELECT @rank:=0,@week:=0) r
  ORDER BY week DESC, id ASC
  ) t2)
  t3
  order by week DESC, rank desc

只需使您的查詢成為子查詢並按外部查詢順序即可:

select t.*
from (<your query>
     ) t
order by rank desc;

暫無
暫無

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

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