#sql #sqlite
#sql #sqlite
Вопрос:
Я не знаю, как написать запрос в sqlite, который был бы из этой таблицы:
image_id | feature_id | feature_val
_________|____________|____________
12 | 1 | 41
12 | 2 | 82
12 | 3 | 75
74 | 1 | 23
74 | 2 | 35
74 | 3 | 72
Возвращена таблица результатов:
image_id | feature_1_val | feature_2_val | feautre_3_val
_________|_________________|_______________|_______________
12 | 41 | 82 | 75
74 | 23 | 35 | 72
Мы можем предположить, что количество объектов изображения является постоянным и равно 3.
Я был бы очень благодарен за вашу помощь.
Ответ №1:
Вызывается процесс превращения строк в столбцы pivoting
. Это лучше всего делать на стороне клиента. Например, Microsoft Excel имеет широкую поддержку через сводные таблицы.
Но это не невозможно в SQL. Вот один пример использования max(case(
трюка:
select image_id
, max(case when feature_id = 1 then feature_val end) as feature_1_val
, max(case when feature_id = 2 then feature_val end) as feature_2_val
from YourTable
group by
image_id
Комментарии:
1. Я очень похожий код, но без «max», и он не работал должным образом. Большое спасибо! 🙂
Ответ №2:
Учитывая ограничения, изложенные в вопросе, вы можете создать неэлегантный, но работоспособный подход, используя подзапросы:
SELECT it.image_id,
(SELECT feature_val FROM ImageTable WHERE ImageTable.image_id = it.image_id AND ImageTable.feature_id = 1) AS feature_1_val,
(SELECT feature_val FROM ImageTable WHERE ImageTable.image_id = it.image_id AND ImageTable.feature_id = 2) AS feature_2_val,
(SELECT feature_val FROM ImageTable WHERE ImageTable.image_id = it.image_id AND ImageTable.feature_id = 3) AS feature_3_val
FROM ImageTable AS it
GROUP BY it.image_id