在sql中按月份名称分组

Posted

技术标签:

【中文标题】在sql中按月份名称分组【英文标题】:group by monthname in sql 【发布时间】:2014-01-30 08:55:47 【问题描述】:

我有一张桌子,看起来像:

id    |   Item  | Quantity | Amount | created
________________________________________________
1     | Monitor | 10       | 5000   | 2013-01-11
2     | Keyboard| 10       | 200    | 2013-02-19
3     | Monitor | 10       | 5000   | 2013-02-13
3     | Keybard | 10       | 200    | 2013-04-19

当我通过查询时:

SELECT monthname( created ) AS
MONTH , sum( quantity ) AS qty
FROM `sales`
WHERE year( created ) = '2013'
GROUP BY monthname( created )
ORDER BY monthname( created ) DESC

它给出了结果:

month      |  qty    
______________________
January    | 10
February   | 20
April      | 10

但我试图检索的是:

month      |  qty    
______________________
January    | 10
February   | 20
March      | 0
April      | 10
由于我没有销售 no march 结果必须返回数量为 0 的三月销售。

我在我的应用程序中使用 Codeigniter,所以如果我们无法通过 sql 解决它,那么您可以告诉我通过 Codeigniter 解决它的方法。

$this->db->select('monthname(created) as month, sum(quantity) as qty');
$this->db->from('sales');
$this->db->where('year(created) = 2013');
$this->db->group_by('monthname(created)');
$this->db->order_by('monthname(created)');
$this->data['sales'] = $this->db->get()-result();

在视图中:

$data = array();

foreach($sales as $sale) 
  $data[] = $sale->qty;

$data的输出:

10, 20, 10 in array;

我需要的是

10, 20, 0, 10 array

【问题讨论】:

查看这里***.com/questions/17916322/… 或这里***.com/questions/11516688/… 【参考方案1】:

我认为最好的选择是有一个如下所示的月份表

id | Month
---------------------
 1 | January
 2 | February
 3 | March
 4 | April
 5 | May
 6 | June
 7 | July
 8 | August
 9 | September
10 | October
11 | November
12 | December

将此表命名为 months

您可以使用如下查询

SELECT
    months.`month`,
    Sum(sales.quantity)
FROM
    sales
RIGHT OUTER JOIN months ON months.`month` = monthname(sales.created)
GROUP BY
    months.`month`
ORDER BY
    months.id

这应该可以正常工作!

这里是SQL Fiddle 可以帮助您

【讨论】:

以上是关于在sql中按月份名称分组的主要内容,如果未能解决你的问题,请参考以下文章

Access SQL 中按月份的年初至今摘要

MySQL = 按月份分组销售计数,然后将月份显示为名称(Jan、Feb...DEC)而不是数值(1、2、3-12)

有没有办法用月份数字而不是月份名称来搜索 SQL 查询?

在 sqlite 中按月分组

如何从 SQL Server 中的日期获取月份编号(不是月份名称)?

求高手我想取出一年中每个月份的某一字段的数据,SQL语句该怎么写