首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -查询-多个分组依据

MySQL -查询-多个分组依据
EN

Stack Overflow用户
提问于 2011-02-17 03:35:48
回答 4查看 30.3K关注 0票数 7

我有下面的表格,我正在尝试计算if type =‘client_ids’的总和,但是,我不想计算重复类型。所以我希望是这样的:

代码语言:javascript
复制
+------+-----------+-----------+
| k_id | client_id | type      |
+------+-----------+-----------+
|    1 |       100 | pc        | 
|    2 |       101 | printer   | 
|    3 |       101 | printer   | 
|    4 |       101 | printer   | 
|    5 |       102 | cellphone | 
+------+-----------+-----------+

查询:

代码语言:javascript
复制
  SELECT client_id, 
         SUM(IF(type = 'printer', 1,0)) 
    FROM FOO 
GROUP BY type, client_id;

结果:

代码语言:javascript
复制
+-----------+--------------------------------+
| client_id | SUM(IF(type = 'printer', 1,0)) |
+-----------+--------------------------------+
|       102 |                              0 | 
|       100 |                              0 | 
|       101 |                              3 | 
+-----------+--------------------------------+

预期结果:

代码语言:javascript
复制
+-----------+--------------------------------+
| client_id | SUM(IF(type = 'printer', 1,0)) |
+-----------+--------------------------------+
|       102 |                              0 | 
|       100 |                              0 | 
|       101 |                              1 | 
+-----------+--------------------------------+
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-17 03:40:31

其中有三行的类型为printerSum将它们相加,然后返回3。

如果您希望为具有打印机的行显示1,否则为0,请尝试max而不是sum

代码语言:javascript
复制
MAX(IF(type = 'printer', 1,0))
^^^

编辑:要计算不同打印机的数量,可以使用子查询:

代码语言:javascript
复制
SELECT  client_id
,       (
        select  count(*) 
        from    FOO as f2 
        where   f1.client_id = f2.client_id
                and type = 'Printer'
        )
FROM    FOO as f1
GROUP BY 
        client_id
票数 7
EN

Stack Overflow用户

发布于 2011-02-17 03:44:23

使用:

代码语言:javascript
复制
   SELECT x.client_id,
          COUNT(DISTINCT y.type) 
     FROM FOO x
LEFT JOIN FOO y ON y.client_id = x.client_id
               AND y.type = 'printer'
 GROUP BY x.client

如果您不需要查看计数为零的行:

代码语言:javascript
复制
   SELECT client_id, 
          COUNT(DISTINCT type)
     FROM FOO 
    WHERE type = 'printer'
 GROUP BY type, client_id;
票数 8
EN

Stack Overflow用户

发布于 2012-08-17 20:48:49

代码语言:javascript
复制
SELECT client_id, if( `type` = 'printer', 1, 0 )
FROM foo
GROUP BY TYPE , client_id
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5021243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档