如何使用 SUMIF 或任何 sql 查询来汇总调查数据的结果?
How to use SUMIF or any sql query to aggregate the result or results of survey data?
我这里有一个在仪表板中用于对调查响应进行排序的查询。我想要的是我的查询添加 ff ie 的结果。
'Male - In Love' + 'Female - In Love';
'Male - Like' + 'Female - Like';
'Male - Facepalm' + 'Female - Facepalm';
'Male - Crying' + 'Female - Crying';
这是我用来对个人回复进行排序的查询:
顺便说一句,我正在使用 laravel 5.4 和 mysql
public function getDataTwo(Request $request){
$data = DB::connection('mysql')->select(DB::raw("SELECT
DATE(`created_at`) as 'DATE',
SUM(IF(`responses`=1,1,0)) as 'Male - In Love',
SUM(IF(`responses`=2,1,0)) as 'Male - Like',
SUM(IF(`responses`=3,1,0)) as 'Male - Facepalm',
SUM(IF(`responses`=4,1,0)) as 'Male - Crying',
SUM(IF(`responses`=5,1,0)) as 'Female - In Love',
SUM(IF(`responses`=6,1,0)) as 'Female - Like',
SUM(IF(`responses`=7,1,0)) as 'Female - Facepalm',
SUM(IF(`responses`=8,1,0)) as 'Female - Crying'
FROM `answers`
WHERE DATE(`created_at`) BETWEEN DATE('$request->startDate') AND
DATE('$request->endDate')
AND TIME(`created_at`) BETWEEN TIME('$request->startDate') AND
TIME('$request->endDate')
-- AND driverid = ('*')
-- AND busid = ('*')
-- AND routeid = ('*')
-- AND questionid = ('*')
GROUP BY DATE(`created_at`)"
)); //Array and Result nito
$tempArr = array();
if(count($data)==0){return $data;}
$xcnt=0;
foreach ($data[0] as $key => $value) {
if($key=='DATE'){continue;}
$tempArr[$xcnt]=array("name"=>$key,"y"=>(int)$value);
$xcnt++;
}
$data = json_encode($tempArr);
return $data;
}
您正在使用 MySQL,因此使用此快捷方式可以更轻松地编写您的查询:
SELECT DATE(created_at) as DATE,
SUM(responses = 1) as `Male - In Love`,
SUM(responses = 2) as `Male - Like`,
SUM(responses = 3) as `Male - Facepalm`,
SUM(responses = 4) as `Male - Crying`,
SUM(responses = 5) as `Female - In Love`,
SUM(responses = 6) as `Female - Like`,
SUM(responses = 7) as `Female - Facepalm`,
SUM(responses = 8) as `Female - Crying`
FROM answers
. . .
然后,您可以轻松添加更多列:
SELECT DATE(created_at) as DATE,
SUM(responses = 1) as `Male - In Love`,
SUM(responses = 2) as `Male - Like`,
SUM(responses = 3) as `Male - Facepalm`,
SUM(responses = 4) as `Male - Crying`,
SUM(responses = 5) as `Female - In Love`,
SUM(responses = 6) as `Female - Like`,
SUM(responses = 7) as `Female - Facepalm`,
SUM(responses = 8) as `Female - Crying`,
SUM(responses IN (1, 5)) as `Males + Females - In Love`),
. . .
FROM answers
. . .
备注:
IF()
已经是 non-standard SQL。您不妨使用 MySQL 更方便的 "treat booleans as numbers" 扩展名。
- 仅对字符串和日期常量使用单引号。不要将它们用于列别名。
我这里有一个在仪表板中用于对调查响应进行排序的查询。我想要的是我的查询添加 ff ie 的结果。
'Male - In Love' + 'Female - In Love';
'Male - Like' + 'Female - Like';
'Male - Facepalm' + 'Female - Facepalm';
'Male - Crying' + 'Female - Crying';
这是我用来对个人回复进行排序的查询:
顺便说一句,我正在使用 laravel 5.4 和 mysql
public function getDataTwo(Request $request){
$data = DB::connection('mysql')->select(DB::raw("SELECT
DATE(`created_at`) as 'DATE',
SUM(IF(`responses`=1,1,0)) as 'Male - In Love',
SUM(IF(`responses`=2,1,0)) as 'Male - Like',
SUM(IF(`responses`=3,1,0)) as 'Male - Facepalm',
SUM(IF(`responses`=4,1,0)) as 'Male - Crying',
SUM(IF(`responses`=5,1,0)) as 'Female - In Love',
SUM(IF(`responses`=6,1,0)) as 'Female - Like',
SUM(IF(`responses`=7,1,0)) as 'Female - Facepalm',
SUM(IF(`responses`=8,1,0)) as 'Female - Crying'
FROM `answers`
WHERE DATE(`created_at`) BETWEEN DATE('$request->startDate') AND
DATE('$request->endDate')
AND TIME(`created_at`) BETWEEN TIME('$request->startDate') AND
TIME('$request->endDate')
-- AND driverid = ('*')
-- AND busid = ('*')
-- AND routeid = ('*')
-- AND questionid = ('*')
GROUP BY DATE(`created_at`)"
)); //Array and Result nito
$tempArr = array();
if(count($data)==0){return $data;}
$xcnt=0;
foreach ($data[0] as $key => $value) {
if($key=='DATE'){continue;}
$tempArr[$xcnt]=array("name"=>$key,"y"=>(int)$value);
$xcnt++;
}
$data = json_encode($tempArr);
return $data;
}
您正在使用 MySQL,因此使用此快捷方式可以更轻松地编写您的查询:
SELECT DATE(created_at) as DATE,
SUM(responses = 1) as `Male - In Love`,
SUM(responses = 2) as `Male - Like`,
SUM(responses = 3) as `Male - Facepalm`,
SUM(responses = 4) as `Male - Crying`,
SUM(responses = 5) as `Female - In Love`,
SUM(responses = 6) as `Female - Like`,
SUM(responses = 7) as `Female - Facepalm`,
SUM(responses = 8) as `Female - Crying`
FROM answers
. . .
然后,您可以轻松添加更多列:
SELECT DATE(created_at) as DATE,
SUM(responses = 1) as `Male - In Love`,
SUM(responses = 2) as `Male - Like`,
SUM(responses = 3) as `Male - Facepalm`,
SUM(responses = 4) as `Male - Crying`,
SUM(responses = 5) as `Female - In Love`,
SUM(responses = 6) as `Female - Like`,
SUM(responses = 7) as `Female - Facepalm`,
SUM(responses = 8) as `Female - Crying`,
SUM(responses IN (1, 5)) as `Males + Females - In Love`),
. . .
FROM answers
. . .
备注:
IF()
已经是 non-standard SQL。您不妨使用 MySQL 更方便的 "treat booleans as numbers" 扩展名。- 仅对字符串和日期常量使用单引号。不要将它们用于列别名。