Comunidad de diseño web y desarrollo en internet online

SQL: Group By, SUM() y porcentajes

Citar            
MensajeEscrito el 07 Jul 2008 08:28 pm
Buenas, buenas.

Tengo dos tablas en una base de datos. Una se llama "ventas" y otra "ventas_meta". Ambas se relacionan mediante la columna "id". Los contenidos de "ventas" son algo así:

Código :

+----+----------------------------+------------+
| id | producto                   | cantidad   |
+----+----------------------------+------------+
| 1  | Trampa para correcaminos   | 1200.00    |
+----+----------------------------+------------+
| 2  | Dinamita contra conejos    | 3600.00    |
+----+----------------------------+------------+
| 3  | Basura alimenticia         | 0.50       |
+----+----------------------------+------------+
| 4  | Caja de LOL                | 150.00     |
+----+----------------------------+------------+
| 5  | Caja de WUT                | 1000.000   |
+----+----------------------------+------------+

Los contenidos de "ventas_meta", serían entonces así:

Código :

+----+-------------+
| id | marca       |
+----+-------------+
| 1  | ACME        |
+----+-------------+
| 2  | ACME        |
+----+-------------+
| 3  | McDonald's  |
+----+-------------+
| 4  | Chan        |
+----+-------------+
| 5  | Chan        |
+----+-------------+


Ahora, lo que quiero obtener, es la cantidad ganada por marca. Esta es mi consulta SQL:

Código :

SELECT
   SUM(ventas.cantidad) AS total,
   ventas_meta.marca AS marca
FROM
   ventas,
   ventas_meta
GROUP BY marca;


Entonces, MySQL regresa lo siguiente:

Código :

+-----------+---------------+
| total     | marca         |
+-----------+---------------+
| 4800.00   | ACME          |
+-----------+---------------+
| 0.50      | McDonald's    |
+-----------+---------------+
| 1150.00   | Chan          |
+-----------+---------------+


Eso está perfecto, por ahora. Ahora, quiero que convierta los datos de "total" en porcentajes, basados en el total máximo. Esto quiere decir, que "ACME" tendría un porcentaje de 100%, y "McDonald's" y "Chan" tendrían un porcentaje basado en el de "ACME". Hipotéticamente, este es el resultado:

Código :

+-----------+---------------+----------------+
| total     | marca         | porcentaje     |
+-----------+---------------+----------------+
| 4800.00   | ACME          | 100            |
+-----------+---------------+----------------+
| 0.50      | McDonald's    | 0.010          |
+-----------+---------------+----------------+
| 1150.00   | Chan          | 23.9           |
+-----------+---------------+----------------+


Aquí es donde mis habilidades me traicionan. Necesito crear una consulta para obtener el último resultado. Esto se podría lograr con bucles en PHP, pero preferiría usar una simple consulta en SQL.

O no sé cómo usar Google, o los términos que he elegido son incorrectos.

La ayuda se aprecia :)

Por Alan

470 de clabLevel

2 tutoriales

 

firefox
Citar            
MensajeEscrito el 07 Jul 2008 11:28 pm

Código :


(100 / MAX (SUM(ventas.cantidad)) * total) AS porcentaje


De igual manera, la consulta deberia ser algo haci:

Código :

SELECT   
SUM(VT.cantidad) AS total,   
VM.marca AS marca,
(100 / MAX (SUM(VT.cantidad)) * VT.cantidad) AS porcentaje
FROM   ventas VT  
INNER JOIN ventas_meta VM 
ON VT.id = VM.id
GROUP BY VM.marca;

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.