0

我需要每天获得销售额的总和......按天分组......并按项目分组。我尝试了各种查询,但不确定我是否需要进行连接或不需要。

所以这是我的桌子

Item | Price | Day
Apple    2      May1
Banana   3      May1
Apple    2      May1
Banana   3      May2
Apple    2      May2
Banana   3      May2

我需要为我的图表返回这个...

{期间:'May1','苹果':'4','香蕉':'3'},{期间:'May2','苹果':'2','香蕉':'6'}

如果有人能引导我朝着正确的方向前进,那就太棒了。

现在我得到的最远的是按天分组......但我似乎无法按天分组,并按项目分开。

我必须为每个项目运行单独的查询吗?如果是这样...我最终如何将它们结合在一起?

4

1 回答 1

1

尝试

SELECT CONCAT('{\'period\':\'', day, '\',', GROUP_CONCAT(itemprice ORDER BY itemprice), '}') row
  FROM (SELECT day, CONCAT('\'', item, '\':\'', SUM(price), '\'') itemprice
          FROM table1
         GROUP BY day, item) n
GROUP BY day

输出:

|                                              ROW |
----------------------------------------------------
| {'period':'2013-05-01','Apple':'4','Banana':'3'} |
| {'period':'2013-05-02','Apple':'2','Banana':'6'} |

SQLFiddle

更新:每天获取所有物品

SELECT CONCAT('{\'period\':\'', day, '\',', GROUP_CONCAT(itemprice ORDER BY itemprice), '}') row
  FROM (
SELECT day, CONCAT('\'', item, '\':\'', SUM(price), '\'') itemprice
  FROM (
SELECT a.day, a.item, IFNULL(t.price, 0) price
  FROM (SELECT day, item FROM
        (
         (SELECT DISTINCT item FROM table1) i CROSS JOIN
         (SELECT DISTINCT day FROm table1) d
        )) a LEFT JOIN
       table1 t ON a.day = t.day AND a.item = t.item    
       ) m
 GROUP BY day, item) n
GROUP BY day

输出:

|                                              ROW |
----------------------------------------------------
| {'period':'2013-05-01','Apple':'4','Banana':'3'} |
| {'period':'2013-05-02','Apple':'2','Banana':'6'} |
| {'period':'2013-05-03','Apple':'2','Banana':'0'} |

SQLFiddle

于 2013-05-11T05:12:27.730 回答