表结构:
CREATE TABLE `film` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`release_year` varchar(4) ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `film` VALUES (1, '2016');
INSERT INTO `film` VALUES (2, '2016');
INSERT INTO `film` VALUES (3, '2016');
INSERT INTO `film` VALUES (4, '2016');
INSERT INTO `film` VALUES (5, '2016');
INSERT INTO `film` VALUES (6, '2017');
INSERT INTO `film` VALUES (7, '2017');
INSERT INTO `film` VALUES (8, '2017');
INSERT INTO `film` VALUES (9, '2018');
INSERT INTO `film` VALUES (10, NULL);
数据:
mysql> SELECT * FROM film;
+----+--------------+
| id | release_year |
+----+--------------+
| 1 | 2016 |
| 2 | 2016 |
| 3 | 2016 |
| 4 | 2016 |
| 5 | 2016 |
| 6 | 2017 |
| 7 | 2017 |
| 8 | 2017 |
| 9 | 2018 |
| 10 | NULL |
+----+--------------+
10 rows in set (0.00 sec)
group by
mysql> SELECT COUNT(id),release_year FROM film GROUP BY release_year;
+-----------+--------------+
| COUNT(id) | release_year |
+-----------+--------------+
| 5 | 2016 |
| 3 | 2017 |
| 1 | 2018 |
+-----------+--------------+
3 rows in set (0.00 sec)
在一条SQL语句中同时查出2006年和2007年的电影数量分别是多少
SELECT
COUNT( release_year = '2016' OR NULL ) AS '2016年的电影数量',
COUNT( release_year = '2017' OR NULL ) AS '2017年的电影数量'
FROM
film;
+------------------+------------------+
| 2016年的电影数量 | 2017年的电影数量 |
+------------------+------------------+
| 5 | 3 |
+------------------+------------------+
1 row in set (0.03 sec)
说明,在sql中,count(*) 和 count(某列) ,执行结果有时候会是不一样的,因为,count(*)包含为null的,而另个如果为null的话,则不计数在内。
利用这个特性,将为不是2016年的记为null
参考
[1] mysql性能优化之max,count优化 [DB|OL] https://blog.youkuaiyun.com/qq_28602957/article/details/52138947