[英]using sql count in a case statement
我有一張桌子,我需要以以下方式顯示輸出。
tb_a:
col1 | reg_id | rsp_ind
rsp_ind = 0 為 'New' 和 1 為 'Accepted' 的行數
輸出應該是
NEW | Accepted
9 | 10
我嘗試使用以下查詢。
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
我得到的輸出為
NEW | Accepted
NULL| 10
9 | NULL
有人可以幫我調整查詢以實現輸出。 注意:我無法在此周圍添加總和。 它是更大程序的一部分,因此我無法為此添加超級查詢。
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
您可以在此處查看此請求的輸出
關閉...嘗試:
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
根據您的 SQL 風格,您還可以在聚合計數中暗示 else 語句。
例如,這是一個簡單的表Grades
:
| Letters |
|---------|
| A |
| A |
| B |
| C |
我們可以像這樣測試每個聚合計數器語法( SQL Fiddle 中的交互式演示):
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
這是結果(為了可讀性而未透視):
| Description | Counts |
|-------------------|--------|
| Count - End | 2 |
| Count - Else Null | 2 |
| Count - Else Zero | 4 | *Note: Will include of values
| Sum - End | 2 |
| Sum - Else Null | 2 |
| Sum - Else Zero | 2 |
與SQL 中聚合函數的文檔一致
COUNT
文檔:
COUNT(*)
- 返回組中的項目數。 這包括 NULL 值和重復項。
COUNT(ALL expression)
- 為組中的每一行計算表達式,並返回非空值的數量。
COUNT(DISTINCT expression)
- 為組中的每一行計算表達式,並返回唯一的非空值的數量。
SUM
文檔:
ALL
- 將聚合函數應用於所有值。 ALL 是默認設置。
DISTINCT
- 指定 SUM 返回唯一值的總和。
你得到兩行而不是一行的原因是你在外部查詢中按rsp_ind
分組(你沒有,讓我失望的是,與我們分享)。 如果不處理該GROUP BY
項目,您無法強制執行一行而不是兩行。
如果要根據列對結果進行分組並根據相同的列進行計數,則可以將查詢運行為:
$sql = "SELECT COLUMNNAME,
COUNT(CASE WHEN COLUMNNAME IN ('YOURCONDITION') then 1 ELSE NULL END) as 'New',
COUNT(CASE WHEN COLUMNNAME IN ('YOURCONDITION') then 1 ELSE NULL END) as 'ACCPTED'
FROM TABLENAME
GROUP BY COLUMNANME";
select sum(rsp_ind = 0) as `New`,
sum(rsp_ind = 1) as `Accepted`
from tb_a
行。 我解決了
SELECT `smart_projects`.project_id, `smart_projects`.business_id, `smart_projects`.title,
`page_pages`.`funnel_id` as `funnel_id`, count(distinct(page_pages.page_id) )as page_count, count(distinct (CASE WHEN page_pages.funnel_id != 0 then page_pages.funnel_id ELSE NULL END ) ) as funnel_count
FROM `smart_projects`
LEFT JOIN `page_pages` ON `smart_projects`.`project_id` = `page_pages`.`project_id`
WHERE smart_projects.status != 0
AND `smart_projects`.`business_id` = 'cd9412774edb11e9'
GROUP BY `smart_projects`.`project_id`
ORDER BY `title` DESC
CREATE TABLE #CountMe (Col1 char(1));
INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');
INSERT INTO #CountMe VALUES ('A');
INSERT INTO #CountMe VALUES ('B');
SELECT
COUNT(CASE WHEN Col1 = 'A' THEN 1 END) AS CountWithoutElse,
COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE NULL END) AS CountWithElseNull,
COUNT(CASE WHEN Col1 = 'A' THEN 1 ELSE 0 END) AS CountWithElseZero
FROM #CountMe;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.