count是sql的一个标准行统计函数,在实际应用中很是普遍,还有另外一种情况也经常会被用到:有条件地统计行数,看个DEMO:
下表为一个业务员终端门店拜访表, sale_zd_access:
sb_no | shop_id | shop_name | saler_id | sb_sales | sb_time |
---|---|---|---|---|---|
201709070002 | 100 | 测试0904 | 1001 | 5 | 2017-09-07 09:30:11 |
201709220001 | 100 | 测试0904 | 1003 | 8 | 2017-09-07 14:30:11 |
201709220001 | 657 | 凤阳县鑫博食品 | 1003 | 8 | 2017-09-22 09:30:11 |
统计拜访次数、门店数,sql如下:
-- 3, 2, 2家门店被拜访了3次
select count(sb_no) access_times, count(distinct shop_id) shop_count
from sale_zd_access
关于count的几点hacks:
1)count(col), 当col有null值时,会跳过null值,假设有5行记录,其中有一行是null值,则count(col) = 4
2)部分count可以用sum代替,如拜访次数可以用sum(1)替代:
select sum(1) access_times, count(distinct shop_id) shop_count
from sale_zd_access
3)当用sum替代时,记住mysql boolean值,true = 1, false = 0,因此条件统计时直接可以使用下述方式: 统计col1 = val1的行数,col2 = val2的行数
select sum(col1 = val1), sum(col2 = val2), …