iT邦幫忙

4

趣味SQL又來了 訂便當之後做排名以及相對另一組時的排名

  • 分享至 

  • xImage

訂便當一段時間之後,總是需要排名.假設雞腿跟便當各有前10的,做排名,
還有到另一組時會排名第幾?
為了方便大家研究,不用亂數,使用循序的產生.

create table 雞腿組 (
  id int not null primary key
, val int
);

create table 排骨組 (
  id int not null primary key
, val int
);

insert into 雞腿組
select n, 6 + 10 * n
  from generate_series(1, 10) n;

insert into 排骨組
select n, 4 + 10 * n
  from generate_series(1, 10) n;

select id, val
     , rank() over(order by val desc)
  from 雞腿組;

 id | val | rank 
----+-----+------
 10 | 106 |    1
  9 |  96 |    2
  8 |  86 |    3
  7 |  76 |    4
  6 |  66 |    5
  5 |  56 |    6
  4 |  46 |    7
  3 |  36 |    8
  2 |  26 |    9
  1 |  16 |   10
(10 rows)

方便測試用,已經做好線上的 按我前往

想要做到如下圖:
https://ithelp.ithome.com.tw/upload/images/20231129/200506478ZDaiLeIyM.png

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

4
Arsene
iT邦新手 5 級 ‧ 2023-11-29 21:27:57
最佳解答

記得 RANK(Value) WITHIN GROUP (...) 可以把某個值放到特定群中取得排名
這樣就可以解出

select val as 排骨組val, 
  (select RANK(排骨組.val) WITHIN GROUP (order by 雞腿組.val desc) from 雞腿組) as 在雞腿組排名
  from 排骨組
  order by 2;

相同函數,另一種寫法.

select 排骨組.val as 排骨組val
     , rank(排骨組.val) WITHIN GROUP (order by 雞腿組.val desc) as 在雞腿組排名
  from 雞腿組
     , 排骨組
 group by 排骨組.val
 order by 排骨組.val desc;

按我前往

我要發表回答

立即登入回答