Это, кажется, дает правильный ответ:
QL я хотел бы иметь дополнительный столбец, показывающий сумму значений определенного столбца. Однако числа, которые я хотел бы суммировать, взяты из подзапроса и не хранятся в отдельной таблице, что-то вроде этого:
(SELECT a.ID, MAX(a.COUNT_ID) AS MAX_COUNT FROM
(SELECT ID, COUNT(*) AS COUNT_ID
FROM my_table
GROUP BY COL1, COL2) a
GROUP BY COL1, COL2) b
И это будет выводить что-то вроде:
ID MAX_COUNT
ABC 1
DEF 2
GHI 3
А теперь я хочу дополнительный столбец, показывающий сумму MAX_COUNT, например, (повторяется по всем строкам):
ID MAX_COUNT SUM_MAX_COUNT
ABC 1 6
DEF 2 6
GHI 3 6
Фактическая цель - показать процент MAX_COUNT от общего MAX_COUNT, то есть 1/6, 2/6 и 3/6. Как мне это сделать? Я уже пытался сделатьCROSS JOIN
но это не работает:
SELECT * FROM
((SELECT a.ID, MAX(a.COUNT_ID) AS MAX_COUNT FROM
(SELECT ID, COUNT(*) AS COUNT_ID
FROM my_table
GROUP BY COL1, COL2) a
GROUP BY COL1, COL2) b
CROSS JOIN (SELECT SUM(b.MAX_COUNT)) AS c
Ошибка: неизвестная таблица 'b'
ПРИМЕР
Пример таблицы:
CREATE TABLE TABLE1 (
COL1 varchar(255),
COL2 varchar(255),
DAY int,
HOUR int);
INSERT INTO TABLE1 VALUES
('X','Y',1,12),
('X','Y',1,13),
('X','Y',1,13),
('A','B',2,19),
('X','B',3,13),
('X','B',3,13);
Теперь я хочу, чтобы для каждой комбинации COL1 и COL2 число строк в этой таблице для каждого часа:
SELECT COL1, COL2, HOUR, COUNT(*) AS COUNT_LINES
FROM TABLE1
GROUP BY DAY, HOUR, COL1, COL2;
Что выводит это:
COL1 COL2 HOUR COUNT_LINES
X Y 12 1
X Y 13 2
A B 19 1
X B 13 2
Теперь я хочу, чтобы для каждой комбинации COL1 и COL2 был максимум COUNT_LINES, поэтому я использую запрос выше в подзапросе:
SELECT a.COL1, a.COL2, MAX(a.COUNT_LINES)
FROM
(SELECT COL1, COL2, HOUR, COUNT(*) AS COUNT_LINES
FROM TABLE1
GROUP BY DAY, HOUR, COL1, COL2) a
GROUP BY COL1, COL2;
Что выводит это:
COL1 COL2 MAX(COUNT_LINES)
A B 1
X B 2
X Y 2
Теперь на последнем шаге я хочу, чтобы столбец SUM of MAX (COUNT_LINES) находился в отдельном столбце, например так:
COL1 COL2 MAX(COUNT_LINES) SUM(MAX(COUNT_LINES))
A B 1 5
X B 2 5
X Y 2 5
Но это та часть, которую я не знаю, как сделать.