我有一个数据库表,其中包含用户提交的3个问题的答案。所有问题的答案都是肯定/没有答案。像这样
username question1 question2 question3
user1 yes no yes
user2 yes yes yes
user3 yes no no
user4 no no no
我想要做的是收集每列中每个'是'的计数。所以我对每个问题都有一定数量的肯定,即'question1'='3',question2 ='1'等等。
目前我对每个问题都有3个单独的陈述,但是我只是想知道是否有办法将这些陈述合并为一个陈述以使其更有效?
答案 0 :(得分:4)
可以使用围绕SUM()
语句的简单聚合GROUP BY
(没有CASE
)来完成此操作。如果值为yes
,则返回1,否则返回0.然后,通过SUM()
将这些1添加到列上。
SELECT
SUM(CASE WHEN question1 = 'yes' THEN 1 ELSE 0 END) AS q1,
SUM(CASE WHEN question2 = 'yes' THEN 1 ELSE 0 END) AS q2,
SUM(CASE WHEN question3 = 'yes' THEN 1 ELSE 0 END) AS q3
FROM yourtable
MySQL还允许进行简单的布尔比较,返回1或0,但这不能移植到其他RDBMS。
/* Shorter version, only works for MySQL */
SELECT
SUM(question1 = 'yes') AS q1,
SUM(question2 = 'yes') AS q2,
SUM(question3 = 'yes') AS q3
FROM yourtable