MySQL combina COUNT, MAX y SUM
En MySQL, me gustaría tener una columna adicional que muestre la suma de valores de una columna en particular. Sin embargo, los números que me gustaría sumar provienen de una subconsulta y no se almacenan en una tabla separada, algo como esto:
(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
Y esto generaría algo como:
ID MAX_COUNT
ABC 1
DEF 2
GHI 3
Y ahora, quiero una columna adicional que muestre la suma de MAX_COUNT, como esta (repetida en todas las filas):
ID MAX_COUNT SUM_MAX_COUNT
ABC 1 6
DEF 2 6
GHI 3 6
El objetivo real es mostrar el porcentaje MAX_COUNT del total MAX_COUNT, por lo tanto, 1/6, 2/6 y 3/6. ¿Cómo hago esto? Ya intenté hacer unCROSS JOIN
pero no funciona
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
Error: tabla desconocida 'b'
EJEMPLO
Tabla de ejemplo:
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);
Ahora quiero tener, para cada combinación de COL1 y COL2, el número de líneas en esta tabla para cada hora:
SELECT COL1, COL2, HOUR, COUNT(*) AS COUNT_LINES
FROM TABLE1
GROUP BY DAY, HOUR, COL1, COL2;
Lo que genera esto:
COL1 COL2 HOUR COUNT_LINES
X Y 12 1
X Y 13 2
A B 19 1
X B 13 2
Ahora quiero, para cada combinación de COL1 y COL2, el máximo de COUNT_LINES, por lo que utilizo la consulta anterior en una subconsulta:
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;
Lo que genera esto:
COL1 COL2 MAX(COUNT_LINES)
A B 1
X B 2
X Y 2
Ahora, en el último paso, quiero la columna SUMA DE MÁXIMO (COUNT_LINES) en una columna separada, como esta:
COL1 COL2 MAX(COUNT_LINES) SUM(MAX(COUNT_LINES))
A B 1 5
X B 2 5
X Y 2 5
Pero esa es la parte que no sé hacer.