您好我有一张表格可以存储反馈和评分(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 |
.......... | ... | .... |
答案 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
答案 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,
...