2015-04-30 43 views
0

我想使一個MySQL查詢,以獲得與每個國家或城市一​​天的銷售額天格:MySQL的網格:每天銷售VS區域

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 

但是我必須創造一個我對數據庫中記錄的國家中的每一個,這是一個很大的一行,在城市的情況下,甚至更多。

我怎麼能一次獲得所有的國家或城市?

+0

你的表格結構是什麼樣的?你只有一張桌子嗎?什麼應該是你的查詢所需的輸出? – Maximus2012

回答

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列:出生日期,info_direccion_pais和銷售。這將給國家代碼,所以你可以加入到另一個國家的表格上來獲得國家名稱。看看我對SELECTGROUP BY子句所做的更改。我不確定,但你甚至可以完全擺脫LIMIT條款。

+0

請注意,DATE()的效率會低於範圍查詢。 – Strawberry

+0

足夠接近Mr Maximus2012。我非常感謝你的提議。它同時返回按日期和國家劃分的記錄,這很有用,但它會按照您所描述的那樣生成3列的數組。 –

+0

我試圖在記錄中生成與國家相同數量的列,這可能會稍微複雜一些,我認爲? –