Я хочу сделать запрос MySQL, чтобы получить сетку с продажами по стране или городу изо дня в день:
SELECT DATE(creacion) as fecha,
SUM(case when order_paid = 'Approved' and info_direccion_pais = 'GB' then 1 else 0 end) as sales_UK,
SUM(case when order_paid = 'Approved' and info_direccion_pais = 'AU' then 1 else 0 end) as sales_AU
FROM orders
WHERE DATE(creacion) >= '2015-01-01'
GROUP BY fecha
ORDER BY fecha DESC
LIMIT 0, 100
Этот код возвращает структуру так, как я хочу:
fecha aprobadas_uk aprobadas_au 2015-04-30 5 7 2015-04-29 2 9 2015-04-28 12 19 2015-04-27 4 22 2015-04-26 8 25 2015-04-25 1 9 2015-04-24 3 4 2015-04-23 3 11 2015-04-22 5 1
Однако я должен создать одну строку для каждой из стран, которые у меня есть в записях базы данных, что очень много, даже больше в случае городов.
Как я могу получить все страны или города одновременно?
Попробуйте это и посмотрите, работает ли это:
SELECT DATE(creacion) as fecha, info_direccion_pais,
SUM(case when order_paid = 'Approved' then 1 else 0 end) as sales
FROM orders
WHERE DATE(creacion) >= '2015-01-01'
GROUP BY fecha, info_direccion_pais
ORDER BY fecha DESC, info_direccion_pais
LIMIT 0, 100
Это будет иметь 3 столбца: fecha, info_direccion_pais и sales. Это даст код страны, так что вы можете присоединиться к нему в таблице других стран, чтобы получить название страны. Посмотрите на изменения, которые я внес в SELECT
а также GROUP BY
статьи. Я не уверен, но вы можете даже избавиться от LIMIT
пункт целиком.
Других решений пока нет …