es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo unir el resultado de sum() con una consulta select.

Tengo una tabla básica de transacciones con un total de 4 columnas de la siguiente manera:

transaction_id int(11) NOT NULL AUTO_INCREMENT,
fruit_id int(11),
person_id int(11),
quantity_bought int(11),

ejemplo de consulta select *:

transactionid fruitid personid quantitybought
1 banana alex 65
2 banana joe 25
3 banana jenny 70
4 apple dan 80
5 apple danny 50

Se me requiere agregar la cantidad total comprada de cada fruta a cada fila de esta consulta select:

SELECT transactions.* FROM transactions;

Aquí hay un ejemplo del resultado deseado:

transactionid fruitid personid quantitybought totalquantitybought
1 banana alex 65 160
2 banana joe 25 160
3 banana jenny 70 160
4 apple dan 80 130
5 apple danny 50 130

Esto es lo que intenté hasta ahora y fracasé miserablemente:

select x.* , y.total_quantity_bought
from
(SELECT *
FROM transactions) x
cross join
(SELECT fruit_id , SUM(quantity_bought) AS total_quantity_bought
FROM transactions
GROUP BY fruit_id) y

Pensé en crear una vista para las sumas de la siguiente manera, pero estoy buscando una solución que no requiera una vista:

fruitid totalquantity_bought
banana 160
apple 130

Cualquier ayuda es apreciada.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puede utilizar una subconsulta para obtener la cantidad total comprada de cada fruta:

    SELECT t.*, (SELECT SUM(quantity_bought) FROM transactions WHERE fruit_id = t.fruit_id) AS total_quantity_bought
    FROM transactions t;
    

    Esto le dará el resultado deseado:

    |transaction_id| fruit_id | person_id | quantity_bought |total_quantity_bought|
    |:------------:|:-------:|:--------:|:--------------:|:-------------------:|
    |      1       |  banana |   alex   |       65       |         160         |
    |      2       |  banana |   joe    |       25       |         160         |
    |      3       |  banana |  jenny   |       70       |         160         |
    |      4       |   apple |   dan    |       80       |         130         |
    |      5       |   apple |  danny   |       50       |         130         |
    

Comments are closed.