Я застрял, пытаясь создать запрос для следующей задачи. Может быть, кто-то может помочь мне.
Таблица ввода:
+--------+--------------+------+-----------+-----------+
| Index | Week_end_day | Type | Num_val_1 | Num_val_2 |
+--------+--------------+------+-----------+-----------+
| D0024A | 30.06.2018 | A | 10 | 0 |
| D0024A | 30.06.2018 | A | 20 | 0 |
| D0024A | 30.06.2018 | B | 30 | 1 |
| A0025A | 30.06.2018 | C | 5 | 1 |
| A0025A | 30.06.2018 | B | 4 | 1 |
| A0025A | 30.06.2018 | B | 6 | 0 |
| D0024A | 14.07.2018 | C | 5 | 1 |
| D0024A | 14.07.2018 | A | 10 | 1 |
+--------+--------------+------+-----------+-----------+
Я хочу агрегировать данные по неделям, чтобы все числовые значения c были суммированы, но в то же время агрегировали некоторые категориальные значения другим числовым столбец (средний например). Также необходимо подсчитывать общее количество строк в неделю и рассчитывать каждый тип в неделю.
Таблица вывода:
+--------+----------+----------------------+----------------------+----------------------+--------------------------+--------------------------+--------------+---+---------------------+
| Index | Week_Num | Type_A_avg_Num_val_1 | Type_B_avg_Num_val_1 | Type_C_avg_Num_val_1 | Sum_per_week - Num_val_1 | Sum_per_week - Num_val_2 | Type_A_count | . | total_count_in_week |
+--------+----------+----------------------+----------------------+----------------------+--------------------------+--------------------------+--------------+---+---------------------+
| D0024A | 1 | 15 | 30 | 5 | 60 | 1 | 2 | . | 6 |
| D0024A | 2 | 10 | 22 | 10 | 10 | 2 | 1 | . | 4 |
| D0024A | 3 | 12 | 14 | 7 | 50 | 0 | 3 | . | 5 |
| D0025A | 1 | . | . | . | . | . | . | . | . |
| D0025A | 2 | . | . | . | . | . | . | . | . |
+--------+----------+----------------------+----------------------+----------------------+--------------------------+--------------------------+--------------+---+---------------------+
Я дошел до этой черновой точки:
SELECT
Index,
dense_rank() over(order by Week_end_date) AS Week_Num
SUM(Num_val_1) AS SUM_Num_val_1,
SUM(Num_val_2) AS SUM_Num_val_2,
-- need average
AVG(CASE WHEN Type = 'A' THEN Num_val_1 END) AS TypeA_avg_Num_val_1
....
-- need to count
SUM(CASE WHEN Type = 'A' THEN 1 END) AS TypeA_count
FROM t1
GROUP BY Index, Week_end_date
Не могли бы вы взглянуть? Я получаю ошибки.
Кроме того, не знаю - важно ли, чтобы Index и Week_end_day не сортировались.