首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL根据不同规则获取不同行的计数。

SQL根据不同规则获取不同行的计数。
EN

Stack Overflow用户
提问于 2022-08-17 00:23:52
回答 1查看 26关注 0票数 0

假设你有一张桌子,比如:

代码语言:javascript
复制
| key | status |
| --- | ------ |
| 3   | A      |
| 4   | A      |
| 4   | C      |
| 5   | B      |
| 6   | B      |
| 6   | C      |
| 7   | A      |
| 7   | B      |

我想要一个查询,在单个行中返回包含特定status但应用一些优先级规则的行数。每一行的规则都是不同的,如下所示:

状态为A

  • Column b_count =任何具有B状态的不同key计数的
  • a_count =计数,但相同的键也不以状态为C的状态的c_count =计数的状态出现,但相同的键也不会以AB的状态出现

要点是,所有计数的总数应该等于源表中不同键的总数。在我上面的样本数据中,结果应该是:

代码语言:javascript
复制
| a_count | b_count | c_count |
| ------- | ------- | ------- |
| 3       | 2       | 0       |
EN

回答 1

Stack Overflow用户

发布于 2022-08-17 00:35:12

应该能够使用case语句执行枢轴操作,而不存在。

代码语言:javascript
复制
  SELECT Count (CASE
                    WHEN status = 'A' THEN 1
                    ELSE 0
                  END) AS a_count,
           Count (CASE
                    WHEN status = 'B'
                         AND NOT EXISTS (SELECT 1
                                         FROM   mytable b
                                         WHERE  a.KEY = b.KEY
                                                AND b.status = 'A') THEN 1
                    ELSE 0
                  END) AS b_count,
           Count (CASE
                    WHEN status = 'C'
                         AND NOT EXISTS (SELECT 1
                                         FROM   mytable c
                                         WHERE  a.KEY = c.KEY
                                                AND c.status IN ( 'A', 'B' )) THEN 1
                    ELSE 0
                  END) AS c_count
    FROM   mytable a 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73381638

复制
相关文章

相似问题

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