MySQL count函数

表结构:

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.csdn.net/qq_28602957/article/details/52138947

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值