#sql #presto
#sql #presto
Вопрос:
новое в SQL / Presto здесь.
Не стесняйтесь указывать на очевидное, если это необходимо.
У меня есть подзапрос, который извлекает данные в таблицу, как показано ниже.
Для каждого ItemId 1 будет означать, что тег включен, 0 выключен.
Я пытаюсь создать запрос, который будет извлекать каждый ItemId с соответствующим тегом, если он уникален, в противном случае укажите, существует ли более одного или отсутствует.
Data_Table
| ItemID | TagA | TagB | TagC | TagD | TagE |
| 111 | 1 | 1 | 0 | 0 | 0 |
| 222 | 1 | 1 | 1 | 0 | 0 |
| 333 | 1 | 1 | 0 | 0 | 0 |
| 444 | 0 | 1 | 0 | 0 | 0 |
| 555 | 0 | 0 | 0 | 0 | 0 |
| 666 | 0 | 0 | 0 | 1 | 1 |
Я попробовал оператор case when, который извлекает каждый 1 и другой запрос case, который пытается преобразовать каждый столбец только в одну запись строки.
SELECT Item_ID,
CASE WHEN (Tag_A Tag_B Tag_C Tag_D Tag_E > 1) THEN 'Dupe'
ELSE (CASE WHEN Tag_A = 1 THEN 'TagA_Present'
WHEN Tag_B = 1 THEN 'TagB_Present'
WHEN Tag_C = 1 THEN 'TagC_Present'
WHEN Tag_D = 1 THEN 'TagD_Present'
WHEN Tag_E = 1 THEN 'TagE_Present'
ELSE 'Missing_Tag' END)
END as ItemTag
FROM Data_Table
ОТРЕДАКТИРОВАНО — я зашел слишком далеко с образцом данных, и первоначальный запрос был изменен.
Actual Results
| ItemID | ItemTag |
| 111 | Dupe |
| 222 | TagA_Present |
| 333 | TagB_Present |
| 444 | TagB_Present |
| 555 | Missing |
| 666 | TagD_Present |
ItemId 111, 222, 333 и 666 должны быть «Дублированными», но результаты, похоже, считают случайные уникальными.
Ответ №1:
Хммм. Я думаю:
select t.itemId,
(case when (TagA TagB TagC TagD TagE) > 1 then 'Dupe'
when TagA = 1 then 'TagA'
when TagB = 1 then 'TagB'
when TagC = 1 then 'TagC'
when TagD = 1 then 'TagD'
when TagE = 1 then 'TagE'
else 'Missing'
end) as ItemTag
from Data_Table;
Для этого нет причин использовать агрегацию.
Комментарии:
1. Привет, @gordon-linoff, я зашел слишком далеко с первоначальным вопросом. Я также определял внутреннюю таблицу. С тех пор я скорректировал вопрос, чтобы сделать больше. Собираюсь попробовать ваш ввод сейчас!
2. не получается. Он по-прежнему не различает уникальные случаи. Пример ItemId 111 по-прежнему показывает один из тегов A (я предполагаю, исходя из порядка в таблице данных) вместо отображения ‘Dupe’.