Я следующие две таблицы в PostgreSQL:JOIN с несколькими столбцами в PostgreSQL
TABLE: act_codes
===================
activity act_desc
____________________
1 sleeping
2 commuting
3 eating
4 working
TABLE: data
===================
act1_1 act_1_2 act1_3 act1_4
---------------------------------------------
1 1 3 4
1 2 2 3
1 1 2 2
1 2 2 3
1 1 1 2
1 1 3 4
1 2 2 4
1 1 1 3
1 3 3 4
1 1 4 4
Таблица act_codes является в основном таблица деятельности (с кодом и описанием), и таблицы данных содержит деятельность коды для (в данном случае) 4 раза (act1_1, act1_2, act1_3 и act1_4).
Я пытаюсь запросить это, чтобы получить таблицу подсчетов для каждого вида деятельности. Мне удалось сделать это для каждого отдельного столбца (в данном случае act1_4), как это:
SELECT A.act_code, A.act_desc, COUNT (act1_4)
FROM act_codes AS A
LEFT JOIN data AS D
ON D.act1_4 = A.act_code
GROUP BY A.act_code, A.act_desc;
Который работает отлично подходит для этой колонки, но у меня есть очень большое количество столбцов, чтобы работать через, так бы предпочел, если бы был способ сделать это в SQL-запросе.
теперь у меня есть следующий запрос (большое спасибо banazs):
SELECT
ac.act_code,
ac.act_desc,
act_time,
COUNT(activity) AS act_count
FROM
(SELECT
UNNEST(array['act1_1','act1_2','act1_3','act1_4']) AS act_time,
UNNEST(array[d.act1_1, d.act1_2, d.act1_3, d.act1_4]) AS activity
FROM
data d) t
RIGHT JOIN
act_codes ac ON t.activity = ac.act_code
GROUP BY
ac.act_code,
ac.act_desc,
act_time, activity
ORDER BY
activity,
act_time
;
который выводит:
act_code act_desc act_time act_count
---------------------------------------------------------
1 sleeping act1_1 10
1 sleeping act1_2 6
1 sleeping act1_3 2
2 commuting act1_2 3
2 commuting act1_3 4
2 commuting act1_4 2
3 eating act1_2 1
3 eating act1_3 3
3 eating act1_4 3
4 working act1_3 1
4 working act1_4 5
который в основном то, что я искал. В идеале строки с нулевым числом могут быть добавлены каким-то образом, но я предполагаю, что это, пожалуй, лучше всего сделать как отдельный процесс (например, построение кросс-таблицы в R или что-то еще).
Подтвердите: таблица 'data' имеет отдельный столбец для каждого раза? – Richard
Повторить дизайн db. –
Столбцы в таблице данных соответствуют временным сегментам (например, act1_1 - первые 5 минут, act1_2 - второй и т. Д.). Разве это не мой дизайн, поэтому я должен работать с этой формой данных. –