我是一个MySql(和Sql)菜鸟,所以原谅问题的模糊性。请询问您是否需要澄清。我将提供一个有点人为的例子来说明问题。
假设我有一个学校数据库。学校将组织年度体育日,有关谁参加活动的信息存储在如下表格中:
+---------------+-------+------------+
| signup_status | grade | student_id |
+---------------+-------+------------+
| True | 1 | 1001 |
| True | 2 | 2010 |
| True | 1 | 1101 |
| True | 2 | 2002 |
| False | 1 | 1012 |
+---------------+-------+------------+
现在,学校希望按年级分列有多少孩子报名参加活动。所以他们希望看到这样的东西:
+----------------+----------------------------+
| Grade / Status | Signed up | Didn't sign up |
+----------------+-----------+----------------+
| 1 | 2 | 1 |
| 2 | 2 | 0 |
+----------------+-----------+----------------+
我知道我可以运行像
这样的东西SELECT count(`student_id`) as `count`, IF(`status`, 'Yes', 'No') as `signed_up`, `grade`
GROUP BY `grade`, `signed_up`
ORDER BY `grade` ASC
得到这个:
+-----------+---------------+-----------+
| Count | Signed up | Grade |
+-----------+---------------+-----------+
| 2 | Yes | 1 |
| 1 | No | 1 |
| 2 | Yes | 2 |
| 0 | No | 2 |
+-----------+---------------+-----------+
我的问题是,如上所述,我如何从这里走到我想要的地方?
提前致谢。
答案 0 :(得分:1)
使用条件聚合:
select grade, sum(status) as signedup, sum(not status)
from t
group by grade;
MySQL将布尔值视为数字上下文中的数字,“1”表示true,“0”表示false。