obtenga la suma de registros distintos y compare entre dos rangos de fechas.
Tengo una tabla llamada “purchases”, con las columnas: nombre, cantidad, ciudad, fecha.
Quiero devolver la suma de la cantidad y ordenarla por ciudad con la mayor suma de cantidad, y comparar dos rangos de fechas.
Aquí está un ejemplo: http://sqlfiddle.com/#!9/6b2017/6
Puedo obtener el primer conjunto de ciudades con su suma(cantidad) ordenado por suma(cantidad) descendente (período 1):
select distinct city, sum(amount) as total
from purchases
where date between '2020-07-01' and '2020-10-31'
group by city
order by sum(amount) desc
limit 3
La consulta anterior devuelve las ciudades: Tulsa, Nueva York, Chicago
Pero también quiero obtener en la misma consulta, los 3 meses anteriores, pero con las mismas ciudades que se devolvieron en la consulta anterior, algo así, pero como mencioné, quiero que se devuelva en una sola consulta (período 2):
select city, sum(amount) as total
from purchases
where city in ('Tulsa', 'Nueva York', 'Chicago')
and date between '2020-03-01' and '2020-06-31'
group by city
Busco devolver las ciudades (en el orden en que están en la primera consulta), con la suma(cantidad) para cada rango de fechas, por lo que en teoría:
Tulsa período 1: suma(cantidad)
Tulsa período 2: suma(cantidad)
Nueva York período 1: suma(cantidad)
Nueva York período 2: suma(cantidad)
Chicago período 1: suma(cantidad)
Chicago período 2: suma(cantidad)
Cualquier ayuda es apreciada.
davy.ai
Para lograr el resultado deseado en una sola consulta, puede utilizar la agregación condicional con la declaración CASE. Aquí está la consulta modificada:
Esta consulta utiliza dos instancias de la función SUM, cada una con una condición diferente dentro de la declaración CASE. La primera instancia calcula el monto total para el periodo 1 (entre el 1 de julio y el 31 de octubre). La segunda instancia calcula el monto total para el periodo 2 (entre el 1 de marzo y el 30 de junio). La cláusula WHERE limita el resultado a las tres ciudades devueltas en la primera consulta. Por último, el resultado se ordena por el monto total para el periodo 1 en orden descendente.
Esta consulta debería proporcionarle la salida deseada con la suma de los montos para cada periodo y ciudad, ordenados por el monto total en el periodo 1 en orden descendente.