Obtener el total de todos los group by

publicado por: Anonymous

¿Saben cómo puedo obtener el total de un GROUP BY?. Me explico: se realiza una agrupación por plan y cada plan lleva su total; necesito obtener el total de todo eso.

Un ejemplo es

(plan) (cantidad usuarios no admin) costo plan   total
admin      5                            4         (5*4 = 20)
silver     7                            5         (7*5 = 35)
gold       20                           10        (10*20 = 200)

----------------------------------------------------------------------
                                            gran total =    255     

Intente con ROLLUP PERO no funciona. me da un resultado erroneo

El gran total es lo que quiero obtener y ahora si ven eso ya saben que es por que cada uno tiene un costo diferente. Lo que necesito es el query que obtenga gran total.

solución

Te recomiendo utilizar un SELECT anidado, ya que te permite separar las operaciones.

Por ejemplo, considera la siguiente tabla simple llamada planes:

+----+--------+----------+-------+
| id | plan   | usuarios | costo |
+----+--------+----------+-------+
| 1  | admin  | 2        | 4     |
| 2  | admin  | 3        | 4     |
| 3  | silver | 1        | 5     |
| 4  | silver | 2        | 5     |
| 5  | silver | 4        | 5     |
| 6  | gold   | 5        | 10    |
| 7  | gold   | 8        | 10    |
| 8  | gold   | 4        | 10    |
| 9  | gold   | 3        | 10    |
+----+--------+----------+-------+

Para obtener únicamente el gran total, la consulta sería así:

SELECT
    SUM(total) AS total
FROM 
    (
        SELECT
            plan,
            (SUM(usuarios) * MAX(costo)) AS total
        FROM
            planes
        GROUP BY
            plan
    ) planes;

Resultado

+--------+
| total  |
+--------+
| 255    |
+--------+

Si quieres obtener una tabla tal (casi) como la muestras en tu ejemplo, la consulta sería:

SELECT
    plan,
    SUM(usuarios) AS total_usuarios,
    MAX(costo) AS total_costo,
    SUM(total) AS total
FROM
    (
        SELECT
            plan,
            usuarios,
            costo,
            (usuarios * costo) AS total
        FROM
            planes
    ) planes
GROUP BY
    plan
WITH ROLLUP;

Resultado:

+--------+----------------+-------------+-------+
| plan   | total_usuarios | total_costo | total |
+--------+----------------+-------------+-------+
| admin  | 5              | 4           | 20    |
| gold   | 20             | 10          | 200   |
| silver | 7              | 5           | 35    | 
| NULL   | 32             | 19          | 255   |
+--------+----------------+-------------+-------+
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *