2014-06-14 66 views
1

我试图根据求和值的结果基于另一列的不同值创建一个数组根据另一列中的不同值求和sql值,并将结果放入数组

我有这两个专栏月和教训。列中的月份是授课时的月份名称(1月,2月...)。在列教训我有这样的值(12,7,6,9,11等)

示例值

Month |lessons 
------------------ 
January |12 
January |7 
February |6 
March |9 
March |11 

我想实现的是总结经验教训都为每月然后将这些值放入数组中(例如$ month_values = January Sum,February Sum等)。

示例结果

$month_values = 19,6,20; 

我设法与此查询

$sth = $db->prepare("SELECT DISTINCT month FROM acc where month!=''"); 
$sth->execute(); 
$result = $sth->fetchAll(PDO::FETCH_COLUMN, 0); 
$months = json_encode($result); 

拿到个月,但我在努力获取值每月

我已搜查在这里看看是否有人面临同样的挑战,但找不到任何可以帮助我的东西

任何建议如何改变上面的查询并将课程价值放在数组中?

感谢

+0

@KanagarajM绝对荒谬的 – Strawberry

+0

@KanagarajM这是一个贫穷的解决方案。给我5分钟,我会发布如何做一个简单的查询。 –

+0

@largan请修改您的查询,如下所示,或在php中使用循环 – Strawberry

回答

2
SELECT month, SUM(lessons) 
FROM lessons_by_month 
GROUP BY month 
ORDER BY MONTH(STR_TO_DATE(month,'%M')) ASC 

上面的查询将输出为您总结的在历月订单的经验教训。

SQLFIDDLE DEMO

+0

由于某种原因,它不按月排序结果...它始于三月,然后四月,一月,五月,二月,六月 – lStoilov

+1

@largan我已更新我的代码。请检查 – fortune

+0

,这是...谢谢! – lStoilov

2
select group_concat(month), group_concat(l) from (

    SELECT month, SUM(lessons) as l FROM lessons_by_month GROUP BY month 

) foo 

会给你

| GROUP_CONCAT(MONTH) | GROUP_CONCAT(L) | 
|-----------------------|-----------------| 
| February,January,June |   2,6,10 | 
2

简单地说,你在这种情况下,需要的是通过GROUP月份列的行。

SELECT month, SUM(lessons) AS lessons FROM lessons_by_month GROUP BY month 

我还做了一个SQL Fiddle与如果你需要,你可以调整左右。

下面是一个例子输出的基础上,从你的问题输入:

month | lessons 
------------------ 
February | 6 
January | 19 
March | 20 
+0

多数民众赞成在这很好,但这种方式,我将不得不单独查询上市月份和列出的经验教训。我宁愿使用一个查询bor既 – lStoilov

+0

而且,我更喜欢使用PDO – lStoilov

+0

请张贴您想要查看的结果。 – colburton

相关问题