Сводка по рейтинговой таблице

Попытка эффективно преобразовать существующую таблицу с рангом над столбцом раздела в столбец только при наличии ранга 1 и выше. Вот мои данные:

   -------------------------------------
   | Id | Value  | Name          | rank|
   -------------------------------------
   | 1  | 1234   | John          |1    |
   | 2  | 3456   | John          |2    |
   | 3  | 9999   | Chris         |1    |
   | 4  | 9801   | Joe           |1    | 
   | 5  | 1287   | Joe           |2    |
   _____________________________________

К чему я пытаюсь прийти:

   -------------------------------------
   |       ValA  | ValB     | Name     | 
   -------------------------------------
   | 1  | 1234   | 3456    | John      |
   | 2  | 9801   | 1287    | Joe       |
   -------------------------------------

Пробовал несколько версий Pivot, но мне кажется, что я что-то упускаю. Ключ отбрасывает любые строки, где ранг равен только 1, и если у меня есть 1 и 2, чтобы преобразовать их.

Опубликуйте свой запрос, который вы использовали для получения первого вывода таблицы. Это поможет.

mkRabbani 29.05.2019 06:43

Хорошо, если вы предоставите нам то, что вы пытались, и неверный результат, который вы получили. Это может помочь нам лучше помочь вам :)

DarkRob 29.05.2019 06:49
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
41
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете попробовать ниже -

select rank, name, max(case when rank=1 then value end) as valA,
max(case when rank=2 then value end) as valB
from
(
select * from tablename
where rank in (1,2)
group by id, value, name, rank
having count(distinct rank)=2
)X group by rank, name
Ответ принят как подходящий

Это то, что вы хотите?

select max(case when rank = 1 then value end) as value_a,
       max(case when rank = 2 then value end) as value_b,
       name
where rank in (1, 2)
group by name
having count(*) = 2;

Если вам нужен и первый столбец, просто добавьте row_number() over (order by (select null)).

Другие вопросы по теме