在case语句中使用sql count

Rag*_*hav 36 sql

我有一张桌子,我需要以下列方式呈现输出.

tb_a:

col1  |  reg_id | rsp_ind 
Run Code Online (Sandbox Code Playgroud)

rsp_ind = 0的行数为"New",1为"Accepted"

输出应该是

NEW | Accepted
9   | 10
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下查询.

select 
  case when rsp_ind = 0 then count(reg_id)end as 'New',
  case when rsp_ind = 1 then count(reg_id)end as 'Accepted'
from tb_a
Run Code Online (Sandbox Code Playgroud)

我得到的输出为

NEW | Accepted
NULL| 10
9   | NULL
Run Code Online (Sandbox Code Playgroud)

有人可以帮我调整查询以实现输出.注意:我无法在此处添加总和.它是一个更大的程序的一部分,所以我不能添加一个超级查询.

Nug*_*get 91

SELECT 
    COUNT(CASE WHEN rsp_ind = 0 then 1 ELSE NULL END) as "New",
    COUNT(CASE WHEN rsp_ind = 1 then 1 ELSE NULL END) as "Accepted"
from tb_a
Run Code Online (Sandbox Code Playgroud)

您可以在此处查看此请求的输出

  • @JafarKofahi 请随意解释一下!在我看来,这正是他正在寻找的东西...... (2认同)
  • 我认为他的意思是他不能使用任何聚合函数,因为它是一个更大的查询的一部分因为他不能添加一个`group by` (2认同)

Cha*_*ana 9

关闭...尝试:

select 
   Sum(case when rsp_ind = 0 then 1 Else 0 End) as 'New',
   Sum(case when rsp_ind = 1 then 1 else 0 end) as 'Accepted'
from tb_a
Run Code Online (Sandbox Code Playgroud)


Kyl*_*Mit 5

根据您的SQL风格,您还可以在聚合计数中隐含else语句

例如,这是一个简单的表Grades

| Letters |
|---------|
| A       |
| A       |
| B       |
| C       |
Run Code Online (Sandbox Code Playgroud)

我们可以像这样测试每种Aggregate计数器语法(SQL Fiddle中的Interactive Demo):

SELECT
    COUNT(CASE WHEN Letter = 'A' THEN 1 END)           AS [Count - End],
    COUNT(CASE WHEN Letter = 'A' THEN 1 ELSE NULL END) AS [Count - Else Null],
    COUNT(CASE WHEN Letter = 'A' THEN 1 ELSE 0 END)    AS [Count - Else Zero],
    SUM(CASE WHEN Letter = 'A' THEN 1 END)             AS [Sum - End],
    SUM(CASE WHEN Letter = 'A' THEN 1 ELSE NULL END)   AS [Sum - Else Null],
    SUM(CASE WHEN Letter = 'A' THEN 1 ELSE 0 END)      AS [Sum - Else Zero]
FROM Grades
Run Code Online (Sandbox Code Playgroud)

以下是结果(出于可读性的考虑而保留):

|    Description    | Counts |
|-------------------|--------|
| Count - End       |    2   |
| Count - Else Null |    2   |
| Count - Else Zero |    4   | *Note: Will include count of zero values
| Sum - End         |    2   |
| Sum - Else Null   |    2   |
| Sum - Else Zero   |    2   |
Run Code Online (Sandbox Code Playgroud)

哪些与SQL中的聚合函数的文档一致

的文件COUNT

COUNT(*)-返回组中的项目数。这包括NULL值和重复项。
COUNT(ALL expression)-计算组中每一行的表达式,并返回非空值的数量。
COUNT(DISTINCT expression)-计算组中每一行的表达式,并返回唯一的非空值的数量。

的文件SUM

ALL-将汇总函数应用于所有值。ALL是默认值。
DISTINCT-指定SUM返回唯一值的总和。