问题描述
我有这两个表:
create table `polls`(
`pollid` smallint unsigned not null auto_increment,`question` varchar(40) not null,`answer1` varchar(30) not null,`answer2` varchar(30) not null,`answer3` varchar(30) default null,`answer4` varchar(30) default null,`answer5` varchar(30) default null,primary key(`pollid`)
);
create table `poll_votes`(
`void` mediumint unsigned not null auto_increment,`pollid` smallint unsigned not null,`ip_address` varchar(15) not null,`answer` tinyint unsigned not null,primary key(`void`),foreign key(`pollid`) references `polls`(`pollid`)
);
我在poll_votes.answer中存储了整数1-5,该数字是用户已投票的答案。
我想使用一个查询来连续检索所有5个答案的票数。
解决方法
您可以在此处使用条件聚合:
SELECT
SUM(CASE WHEN answer = 1 THEN 1 ELSE 0 END) AS num_answer_1,SUM(CASE WHEN answer = 2 THEN 1 ELSE 0 END) AS num_answer_2,SUM(CASE WHEN answer = 3 THEN 1 ELSE 0 END) AS num_answer_3,SUM(CASE WHEN answer = 4 THEN 1 ELSE 0 END) AS num_answer_4,SUM(CASE WHEN answer = 5 THEN 1 ELSE 0 END) AS num_answer_5
FROM poll_votes;
要获取每个pollid
的这些摘要统计信息,请使用:
SELECT
pollid,SUM(CASE WHEN answer = 1 THEN 1 ELSE 0 END) AS num_answer_1,SUM(CASE WHEN answer = 5 THEN 1 ELSE 0 END) AS num_answer_5
FROM poll_votes
GROUP BY
pollid;
,
如果要用于一个花粉 试试这个
let Highcharts3d = require("highcharts/highcharts-3d");
let HighchartsExporting = require("highcharts/modules/exporting");
,
MySQL有一个非常方便的简写形式用于计数:
SELECT SUM(answer = 1) AS num_answer_1,SUM(answer = 2) AS num_answer_2,SUM(answer = 3) AS num_answer_3,SUM(answer = 4) AS num_answer_4,SUM(answer = 5) AS num_answer_5
FROM poll_votes;
也就是说,布尔值在算术上下文中被视为数字,“ 1”为true,“ 0”为false。