#sql #sqlite #pivot #aggregate-functions
#sql #sqlite #сводная #агрегатные функции
Вопрос:
У меня есть база данных, в которой несколько переменных отображаются в виде последовательных строк (показано ниже, переменные различаются по их тегам). В результате их значения отображаются в виде последовательных строк в столбце «значение».
Существующая таблица:
Для анализа данных мне нужно разделить значение каждой переменной на отдельные столбцы, как показано ниже.
Запрос SQLite приведен ниже. Я пытался использовать ГРУППИРОВКУ по тегу и усреднение значений, но результат становится слишком детализированным, чтобы быть полезным.
Совет был бы очень признателен!
SELECT
tag
,time
,value
FROM
[archive]..[interp]
WHERE
tag
IN
( 'flow1.Val'
, 'flow2.Val'
, 'density1.Val'
, 'density2.Val'
)
AND
time
BETWEEN
't-1d' and 't'
AND
timestep = '1h'
Ответ №1:
Вы можете использовать условную агрегацию:
select time,
max(case when tag = 'flow1.Val' then value end) as flow1_val,
max(case when tag = 'flow2.Val' then value end) as flow2_val,
max(case when tag = 'density1.Val' then value end) as density1_val,
max(case when tag = 'density2.Val' then value end) as density2_val
from [archive]..[interp]
group by time
В зависимости от ваших фактических требований вы можете использовать другую агрегатную функцию, чем max()
, если у вас есть более одной строки для заданного времени / кортежа тегов.