Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 关于多个计数列和分组依据的sql查询帮助_Mysql_Sql - Fatal编程技术网

Mysql 关于多个计数列和分组依据的sql查询帮助

Mysql 关于多个计数列和分组依据的sql查询帮助,mysql,sql,Mysql,Sql,我有下表: id | status | school | name ---------------------------- 0 | fail | skool1 | dan 1 | fail | skool1 | steve 2 | pass | skool2 | joe 3 | fail | skool2 | aaron 我想要一个能给我答案的结果 school | fail | pass --------------------- skool1 | 2 |

我有下表:

id | status | school | name
----------------------------
0  | fail   | skool1 | dan
1  | fail   | skool1 | steve
2  | pass   | skool2 | joe
3  | fail   | skool2 | aaron
我想要一个能给我答案的结果

school | fail | pass  
---------------------
skool1 | 2    | 0   
skool2 | 1    | 1    
我有这个但是很慢

SELECT s.school, (

SELECT COUNT( * ) 
FROM school
WHERE name = s.name
AND status = 'fail'
) AS fail, (

SELECT COUNT( * ) 
FROM school
WHERE name = s.name
AND status = 'pass'
) AS pass,

FROM Students s
GROUP BY s.school

建议?

像这样的建议应该会奏效:

SELECT 
    school,
    SUM(CASE WHEN status = 'fail' THEN 1 ELSE 0 END) as [fail],
    SUM(CASE WHEN status = 'pass' THEN 1 ELSE 0 END) as [pass]
FROM Students
GROUP BY school
ORDER BY school
编辑
差点忘了,但您也可以这样编写查询:

SELECT 
    school,
    COUNT(CASE WHEN status = 'fail' THEN 1 END) as [fail],
    COUNT(CASE WHEN status = 'pass' THEN 1 END) as [pass]
FROM Students
GROUP BY school
ORDER BY school
我不确定第二个查询是否有任何性能优势。我的猜测是,如果有,它可能非常小。我倾向于使用第一个查询,因为我认为它更清晰,但两者都应该有效。此外,我手头没有MySql实例可供测试,但根据@Johan的说法,ORDERBY子句是不必要的

SELECT q.school, q.fail, q.failpass-q.fail as pass
FROM
  (
  SELECT s.school, sum(if(status = 'fail',1,0)) as fail, count(*) as failpass
  FROM students s
  GROUP BY s.school
  ) q
这样您就可以保存一个条件和。
在MySQL中,
groupby
已经对结果排序,因此不需要单独的
orderby