group后count中既包含字段(可DISTINCT去重)又包含条件过滤
2017-02-17 17:33
453 查看
分组后count中既包含字段又包含条件过滤
情景
假如用户表join另一个表后获得如下内容(每个用户可以有多个card,每个card有个card_type属性),别名为tuid | card_type | card |
---|---|---|
1 | 1 | aaa |
1 | 1 | bbb |
1 | 0 | ccc |
2 | 1 | ddd |
常用聚合:
每个用户的card数量:select t.uid, COUNT(t.card) from t group by t.uid select t.uid, COUNT(*) from t group by t.uid
每个用户card_type为1的card数量(COUNT不计null值) 。缺点:只能汇总card_type=1
select t.uid, COUNT(t.card) from t where t.card_type=1 group by t.uid
select t1.uid, COUNT(t1.card) from ( select * from t group by t.uid ) t1 group by t1.id, t1.card_type
select uid, COUNT(card_type=1 or null) from t group by uid
根据字段(可去重)和条件COUNT
每个每种card_type的card数量和所有类型card_type的card数量此时汇总的字段为card,但是一个需要有card_type条件,一个不需要
上面汇总的方法就不适用了,就必须拆分为第1种和第2种两个sql查询。不再多说
下面列举一些单条sql的实现
select t.uid, COUNT(t.card), COUNT(if(t.card_type=1, t.card,null)) from t group by uid
select t.uid, COUNT(t.card), COUNT(CASE WHEN t.card_type=1 THEN t.card ELSE null) from t group by uid
甚至可以对选择汇总的字段card去重计数
COUNT( DISTINCT if(t.card_type=1, t.card,null) )
相关文章推荐
- django ORM model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
- spark【例子】count(distinct 字段) 简易版 使用groupByKey和zip
- django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
- django ORM model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
- django ORM model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
- spark【例子】count(distinct 字段) 简易版 使用groupByKey和zip
- django ORM model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
- spark【例子】count(distinct 字段) 简易版 使用groupByKey和zip
- django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
- django ORM条件过滤,及多表连接查询、反向查询,某字段的distinct
- django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
- django model filter 条件过滤,及多表连接查询、反向查询,某字段的distinct
- ABAP--在查询条件只包含部分索引字段时,如何使用索引
- count distinct多个字段
- django ORM model filter 条件过滤,及多表连接查询、反向查询字段
- 用MD5函数处理oracle数据库中clob字段在where条件或者group中使用
- MongoDB学习笔记——聚合操作之group,distinct,count
- 解决count distinct多个字段的方法
- 9.聚合函数count+distinct+group + MapReduce
- MongoDB count distinct group by JavaAPI查询