Ранжирование значений для определения наибольшего значения - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть данные, которые выглядят так:

+-----+--------+--------+--------+
| ID  | score1 | score2 | score3 |
+-----+--------+--------+--------+
| 123 |     14 |    561 |    580 |
| 123 |    626 |    771 |    843 |
| 123 |    844 |    147 |    904 |
| 456 |    922 |    677 |    301 |
| 456 |    665 |    578 |    678 |
| 456 |    416 |    631 |    320 |
+-----+--------+--------+--------+

Я пытаюсь создать еще один столбец, в котором указано, какой показатель является самым высоким среди трех. Помните, я не ищу значение, я ищу имя столбца. Таким образом, окончательный вывод будет выглядеть так:

+-----+--------+--------+--------+------------+
| ID  | score1 | score2 | score3 | high_score |
+-----+--------+--------+--------+------------+
| 123 |     14 |    561 |    580 | score3     |
| 123 |    626 |    771 |    843 | score3     |
| 123 |    844 |    998 |    904 | score2     |
| 456 |    922 |    677 |    301 | score1     |
| 456 |    665 |    578 |    678 | score3     |
| 456 |    416 |    631 |    320 | score1     |
+-----+--------+--------+--------+------------+

Я продолжаю пытаться выполнить запрос, включающий RANK(), включающий PARTITION BY, но он не дает мне то, что я ищу, и я официальнозастрял.

1 Ответ

1 голос
/ 06 ноября 2019

В Redshift это проще всего сделать с помощью case:

select t.*,
       (case greatest(score1, score2, score3)
             when score1 then 'score1'
             when score2 then 'score2'
             when score3 then 'score3'
        end) as high_score_name,
       greatest(score1, score2, score3) as high_score
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...