簡體   English   中英

對多列和條件的記錄進行排序

[英]Sort records on multiple columns and conditions

我有下表,其中存儲了參加相應活動的人員的排名。

event_running 和 event_jumping 是存儲的事件和排名。

CREATE TABLE `ranks` (
  `id` int(11) NOT NULL,
  `personid` int(11) NOT NULL,
  `event_running` int(11) DEFAULT NULL,
  `event_longjump` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

樣本數據

INSERT INTO `ranks` (`id`, `personid`, `event_running`, `event_longjump`) VALUES
(1, 1, 4, 8),
(2, 2, 10, 6),
(3, 3, 5, 0),
(4, 5, 20, 1),
(5, 4, 9, 3),
(6, 6, 1, 2);

SQL 小提琴鏈接

我想建立一個如下的排行榜

| Standing | PersonID | RunningRank | JumpingRank |
|     1    |     6    |      1      |       2     |
|     2    |     4    |      9      |       3     |
|     3    |     1    |      4      |       8     |
|     4    |     3    |      5      |       0     |
|     5    |     2    |      10     |       6     |

這必須按升序排序 - 無論最低的事件如何,排名在 20 以上的都將被忽略。

以及如何做到這一點的意見?

你可以使用類似於下面的東西

select PersonID,
       RunningRank,
       JumpingRank,
       (RunningRank + JumpingRank) as Total
from ranks
order by Total asc
limit 20;

這是您的查詢。

set @row_number = 0; 

select  (@row_number:=@row_number + 1) as standing, personid, event_running, event_longjump from ranks
where event_running < 20 and event_longjump < 20
order by 
    case when if(event_longjump=0,event_running ,event_longjump) < event_running
         then event_longjump else event_running end  

dbfiddle

你的排序標准有點模糊。 我假設您想根據所有事件的排名累積及其跳躍分數進行排序。

另外,請解釋第 3 個人在您的問題中的位置 你可以做,

select PersonID,
       RunningRank,
       JumpingRank,
       (JumpingRank + RunningRank) as cumulativeRank
from ranks
ORDER BY cumulativeRank, JumpingRank aesc
limit 20;

這將使您獲得所有職位,不包含人員 ID 3

暫無
暫無

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

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