按月分组并添加多个cols

时间:2013-03-01 16:37:12

标签: mysql sql

您好我有一张表格可以存储反馈和评分(1到5之间)

我甚至不知道这是否可以用SQL完成。

我想要做的是按月分组,将所有Q1,Q2,Q3和Q4加在一列中。具有该分组月份中另一列中的记录数量。

然后我可以用PHP来计算那几个月的平均费率。

  unixStamp      |  Q1   |   Q2   |   Q3    |   Q4
-----------------------------------------------------
  1362149504     |  5    |    4   |    3    |   5
  1362136774     |  5    |    5   |    2    |   5
  ..........     |  ...  |  ....  |  ....   |  ....

这是希望我想要实现。

  Mnth           |  score  |   count  | 
---------------------------------------
  1              |  192    |    20    | 
  2              |  365    |    40    | 
  ..........     |  ...    |  ....    |  

2 个答案:

答案 0 :(得分:2)

您可以使用CROSS JOIN 取消忽略数据来获得结果:

SELECT Mnth,
  sum(data) score,
  count(data) `count`
FROM 
(
  SELECT MONTH(FROM_UNIXTIME(unixStamp)) Mnth, 
    CASE q.col
      WHEN 'Q1' THEN Q1
      WHEN 'Q2' THEN Q2
      WHEN 'Q3' THEN Q3
      WHEN 'Q4' THEN Q4
    END AS DATA
  FROM yourtable t
  CROSS JOIN 
  (
    SELECT 'Q1' AS col
    UNION ALL SELECT 'Q2'
    UNION ALL SELECT 'Q3'
    UNION ALL SELECT 'Q4'
  ) q
) s
group by Mnth

请参阅SQL Fiddle with Demo

答案 1 :(得分:1)

GROUP BY可以包含任意表达式(或SELECT表达式中的别名),您可以{4}将4个季度列一起SUM()作为聚合。

SELECT
  /* Retrieve only the month from unixStamp */
  MONTH(FROM_UNIXTIME(unixStamp)) AS Mnth,
  /* SUM() as an aggregate the 4 quarterly cols */
  SUM(Q1+Q2+Q3+Q4) AS score,
  /* COUNT(*) aggregate will list number of records for group */
  COUNT(*) AS `count`
FROM yourtable
GROUP BY Mnth

请注意,上述内容将按月分组,而不是月份/年份组合,这似乎更合适。如果您需要,请使用

之类的内容
/* Supplies month like 2013-02 */
SELECT
  DATE_FORMAT(FROM_UNIXTIME(unixtimestamp), '%Y-%m') AS Mnth,
  ...