让说我有一个表中存储的调查结果,以及语法看起来是这样的:有没有一种方法可以统计SQL中多列的值?
id | q1 | ..... | q30 | created_at
created_at
是一个时间戳列和所有其他人都是整数的字段。
现在我想根据月份得出调查结果。要做到这一点的一个问题,我有:
SELECT YEAR(created_at) as year, MONTH(created_at) as month, q1, count(*) as occurrence
FROM survey_table
GROUP BY YEAR(created_at), MONTH(created_at), q1
的回报将是这样的:
year | month| q1 | occurence
2016 | 11 | 1 | 10
2016 | 11 | 2 | 15
2016 | 11 | 3 | 2
2016 | 10 | 1 | 12
2016 | 10 | 2 | 2
2016 | 10 | 3 | 50
的数据将被传递给我的PHP脚本进行进一步的计算,最后的一些数据显示。
要对30列进行计算,一种方法是针对不同的问题执行此查询30次。我想知道是否有办法做到这一点单查询,以便输出将是这样的:
year | month| q1_1 | q1_2 | q1_3 | q2_1 | q2_2 | q2_3 | ... | q30_1 | q30_2 | q30_3
2016 | 11 | 10 | 15 | 2 | 2 | 20 | 5 | ... | 5 | 15 | 7
2016 | 10 | 12 | 2 | 50 | 25 | 27 | 12 | ... | 20 | 24 | 20
有没有办法在一个查询中这样做吗?如果是,这种表现是否更好?
Google - > SQL Pivoting – sagi
谢谢关键字。 – cytsunny
谷歌,如果你喜欢,但数据显示的问题通常在应用程序级代码(假设可用)最好解决 - 哦,并规范你的设计。 – Strawberry