当前位置: 首页 > 知识库问答 >
问题:

SQL:具有不同条件的多个count语句

丁鸿云
2023-03-14
Code:  Status  Cancel_Date
-----------------------------------
AAA    X       2012-02-01
AAA
BBB    X       2012-02-01
AAA    D       2012-01-01
AAA
BBB    
BBB    D       2012-02-01
BBB    X       2012-01-01
Code:  TotalNotXorD     TotalXorD
------------------------------------
AAA    2                1
BBB    1                2
select code, count(*) 
from table 
where status not in('X','D') 
group by code
select code, count(*) 
from table 
where status in('X','D') 
  and cancel_date >= '2012-02-01' 
group by code

有什么想法吗?

多谢了。

共有1个答案

井洲
2023-03-14
SELECT  a.code,
        COALESCE(b.totalNotXorD, 0 ) totalNotXorD,
        COALESCE(c.totalXorD, 0 ) totalXorD,
FROM    (SELECT DISTINCT Code FROM tableName) a
        LEFT JOIN
        (
            select code, count(*) totalNotXorD
            from table 
            where status not in('X','D') 
            group by code
        ) b ON a.code = b.code
        LEFT JOIN
        (
            select code, count(*) totalXorD
            from table 
            where status in('X','D') 
              and cancel_date >= '2012-02-01' 
            group by code
        ) c ON a.code = c.code

或者简单地执行case

SELECT  Code,
        SUM(CASE WHEN status NOT IN ('X','D') OR status IS NULL THEN 1 ELSE 0 END) TotalNotXorD,
        SUM(CASE WHEN status IN ('X','D') AND cancel_date >= '2012-02-01' THEN 1 ELSE 0 END) TotalXorD  
FROM    tableName
GROUP   BY Code
 类似资料:
  • 我想知道我是否能得到一些帮助,让我的java看起来更好。目前,我正在做一些家庭作业,当我纠正一个if语句的多个条件时,它看起来非常混乱,就像下面的一个。我试着看看str.charat(p)是否等于任何元音,但是这看起来很糟糕,一个接一个地写出来。有更好的办法吗?

  • 问题内容: 我有一个变量。 我想呼应,如果等于任何下列值,,,,或。有没有办法通过像?? 这样的单个语句来做到这一点? 问题答案: 我认为,使用“ Or”代替“ And”会有所帮助

  • 我想代表其他列条件以不同的顺序排列我的列。 有一张桌子看起来像这样: 如果状态为1,则按日期ASC排序,状态为0按日期DESC排序 寻找以下结果 有没有办法点这个。哪儿也找不到 谢谢

  • 问题内容: 我有一个名为“工作”的表。对于特定用户,作业可以是活动的,已归档的,过期的,待处理的或已关闭的。现在,每个页面请求都生成5个COUNT查询,为了进行优化,我试图将其减少为单个查询。到目前为止,这是我所拥有的,但这仅比5个单独的查询要快。请注意,我已经简化了每个子查询的条件,以使其更易于理解,但是完整查询的行为相同。 有没有一种方法可以在不使用无效子查询的情况下在同一查询中获得这5个计数

  • 问题内容: 对于我的工作,我必须开发一个小型Java应用程序,该应用程序可以解析非常大的XML文件(约30万行)以选择非常具体的数据(使用),因此我试图对其进行一些优化。我想知道这两个摘要之间哪个更好: 要么 其他详情: 这些if语句在循环内的每次迭代中执行(约20k次迭代) 的是一种在利用外部函数每次迭代计算 如果将设置为,则无需测试正则表达式是否匹配 谢谢你的帮助。 问题答案: 我遵循的一条黄

  • 我尝试在数据帧“df_energy”中添加一个新的列“energy_class”,如果“consumpion_energy”值为 有什么办法可以帮我吗? 先谢谢你