Consulta PostgreSQL para obtener la suma y las columnas de dos tablas utilizando uniones.
Estas son las tablas que he creado: Tablas
- Quiero obtener accounts.account, accounts.type, DATE(transactions.date), transactions.transactionid, transactions.amount, transactions.note de dos tablas entre ’10-11-2021′ y ’31-12-2021′ (cualquier tipo).
-
Quiero obtener la suma de account de la tabla transactions donde type=”income” y entre ’10-11-2021′ y ’31-12-2021′.
-
Quiero obtener la suma de account de la tabla transactions donde type=”expense” y entre ’10-11-2021′ y ’31-12-2021′.
Pero necesito las tres consultas en una sola instrucción (eso es lo que me está costando).
Mi consulta:
SELECT accounts.account, accounts.type, DATE(transactions.date), transactions.transactionid, transactions.amount, transactions.note
FROM transactions
FULL JOIN accounts ON transactions.accountid = accounts.accountid
WHERE transactions.date BETWEEN '10-11-2021' AND '31-12-2021' ORDER BY transactions.date
UNION
SELECT SUM(amount)
FROM transactions
FULL JOIN accounts ON transactions.accountid = accounts.accountid
WHERE accounts.type = 'income'
-- Agregar las otras dos consultas aquí
¿Alguien puede ayudarme?
davy.ai
Aquí tienes una consulta actualizada que combina las tres consultas en una sola:
Explicación:
CASE
dentro de la funciónSUM
para calcular las sumas de ingresos y gastos por separado, en función de la columnaaccounts.type
.GROUP BY
para agrupar el conjunto de resultados por todas las columnas que estamos seleccionando, de modo que podamos usar la funciónSUM
y mantener las otras columnas en la salida.transactions.date
, al igual que en la consulta original.Ten en cuenta que en las consultas originales, la tabla
accounts
nunca se utilizó para filtrar filas, solo para unirse con la tablatransactions
. Por lo tanto, no es necesario usar una uniónFULL
, y se podría utilizar una uniónINNER
en su lugar (lo cual sería más eficiente si hay muchas filas con ID de cuenta faltante).