一、字符串还是数字?
- 注意有些字段看上去像数值型,但是其实是字符串字段,所以会用例如MAX(),MIN(),WHERE a>b等比较型函数或者语句,但是这样是不对的。
例如,14<9等
例如,我之前用两个看上去像日期值但是实际是字符串或者数值的去做比较,是错误的。 - 解决方法:
select max(a+0)
日期的可以用转换函数:STR_TO_DATE(a,'%y%m%d')
二、现聚合再计数:
- 如果要计算某个维度下的客户数,不要直接用
select goods_category,count(distinct cos_name) from table
因为用distinct非常的慢,全表都需要去重,针对一个很庞大的数据库是很不友好的
-
解决方法:
利用子表
Select goods_category,count(1) as a from (select goods_category,cos_name from tablegroup by cos_name,goods_category)
group by goods_category
首先先用子表聚合一次,你需要的两个字段:goods_category、cos_name,这样就已经筛选出来不重复的项;
然后再单独聚合一次,用count(1)去计数需要count的值。
这里count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
关于count(1):https://blog.csdn.net/haijiege/article/details/85006780
网友评论