排序 COUNT(CASE WHEN) 结果
Sort COUNT(CASE WHEN) results
我正在获取一个状态数据库并将状态创建为列,以便计算每个状态中存在的来自网络的记录数。我很想根据 Partnered 列 DESC 对结果进行排序,但我不知道如何或在何处进行排序??
这是我的代码:
SELECT type,
COUNT(CASE WHEN status = "NOT_SUBMITTED" THEN storenumber END) AS Not_Submitted,
COUNT(CASE WHEN status = "PARTNERED" THEN storenumber END) AS Partnered,
COUNT(CASE WHEN status = "PENDING" THEN storenumber END) AS Pending,
COUNT(CASE WHEN status = "SUSPENDED" THEN storenumber END) AS Suspended,
COUNT(CASE WHEN status = "REJECTED" THEN storenumber END) AS Rejected,
FROM Programs
GROUP BY 1;
这是我目前的结果。
row
type
Not_Submitted
Partnered
Pending
Suspended
Rejected
1
abc
26
473
36
0
374
2
def
2481
3943
797
363
1074
3
ghi
0
1965
0
150
102
4
jkl
1231
1851
0
0
0
试试这个:
#standardSQL
WITH table as (
SELECT type,
COUNT(CASE WHEN status = "NOT_SUBMITTED" THEN storenumber END) AS Not_Submitted,
COUNT(CASE WHEN status = "PARTNERED" THEN storenumber END) AS Partnered,
COUNT(CASE WHEN status = "PENDING" THEN storenumber END) AS Pending,
COUNT(CASE WHEN status = "SUSPENDED" THEN storenumber END) AS Suspended,
COUNT(CASE WHEN status = "REJECTED" THEN storenumber END) AS Rejected,
FROM Programs
GROUP BY 1)
SELECT * FROM table ORDER BY Partnered DESC
我将您的查询放在一个子查询中,然后查询要按 Partnered DESC 排序的子查询
您只需添加 ORDER BY Partnered DESC
,如下例所示
SELECT type,
COUNT(CASE WHEN status = "NOT_SUBMITTED" THEN storenumber END) AS Not_Submitted,
COUNT(CASE WHEN status = "PARTNERED" THEN storenumber END) AS Partnered,
COUNT(CASE WHEN status = "PENDING" THEN storenumber END) AS Pending,
COUNT(CASE WHEN status = "SUSPENDED" THEN storenumber END) AS Suspended,
COUNT(CASE WHEN status = "REJECTED" THEN storenumber END) AS Rejected,
FROM Programs
GROUP BY 1
ORDER BY Partnered DESC
同时,请考虑以下选项
SELECT type,
COUNTIF(status = "NOT_SUBMITTED") AS Not_Submitted,
COUNTIF(status = "PARTNERED") AS Partnered,
COUNTIF(status = "PENDING") AS Pending,
COUNTIF(status = "SUSPENDED") AS Suspended,
COUNTIF(status = "REJECTED") AS Rejected,
FROM Programs
GROUP BY 1
ORDER BY Partnered DESC
最后 - 试试下面的一个(这是我的首选)
SELECT *
FROM (SELECT type, storenumber, status FROM Programs)
PIVOT (
COUNT(DISTINCT storenumber)
FOR status IN ("NOT_SUBMITTED", "PARTNERED", "PENDING", "SUSPENDED", "REJECTED")
)
ORDER BY PARTNERED DESC
我正在获取一个状态数据库并将状态创建为列,以便计算每个状态中存在的来自网络的记录数。我很想根据 Partnered 列 DESC 对结果进行排序,但我不知道如何或在何处进行排序??
这是我的代码:
SELECT type,
COUNT(CASE WHEN status = "NOT_SUBMITTED" THEN storenumber END) AS Not_Submitted,
COUNT(CASE WHEN status = "PARTNERED" THEN storenumber END) AS Partnered,
COUNT(CASE WHEN status = "PENDING" THEN storenumber END) AS Pending,
COUNT(CASE WHEN status = "SUSPENDED" THEN storenumber END) AS Suspended,
COUNT(CASE WHEN status = "REJECTED" THEN storenumber END) AS Rejected,
FROM Programs
GROUP BY 1;
这是我目前的结果。
row | type | Not_Submitted | Partnered | Pending | Suspended | Rejected |
---|---|---|---|---|---|---|
1 | abc | 26 | 473 | 36 | 0 | 374 |
2 | def | 2481 | 3943 | 797 | 363 | 1074 |
3 | ghi | 0 | 1965 | 0 | 150 | 102 |
4 | jkl | 1231 | 1851 | 0 | 0 | 0 |
试试这个:
#standardSQL
WITH table as (
SELECT type,
COUNT(CASE WHEN status = "NOT_SUBMITTED" THEN storenumber END) AS Not_Submitted,
COUNT(CASE WHEN status = "PARTNERED" THEN storenumber END) AS Partnered,
COUNT(CASE WHEN status = "PENDING" THEN storenumber END) AS Pending,
COUNT(CASE WHEN status = "SUSPENDED" THEN storenumber END) AS Suspended,
COUNT(CASE WHEN status = "REJECTED" THEN storenumber END) AS Rejected,
FROM Programs
GROUP BY 1)
SELECT * FROM table ORDER BY Partnered DESC
我将您的查询放在一个子查询中,然后查询要按 Partnered DESC 排序的子查询
您只需添加 ORDER BY Partnered DESC
,如下例所示
SELECT type,
COUNT(CASE WHEN status = "NOT_SUBMITTED" THEN storenumber END) AS Not_Submitted,
COUNT(CASE WHEN status = "PARTNERED" THEN storenumber END) AS Partnered,
COUNT(CASE WHEN status = "PENDING" THEN storenumber END) AS Pending,
COUNT(CASE WHEN status = "SUSPENDED" THEN storenumber END) AS Suspended,
COUNT(CASE WHEN status = "REJECTED" THEN storenumber END) AS Rejected,
FROM Programs
GROUP BY 1
ORDER BY Partnered DESC
同时,请考虑以下选项
SELECT type,
COUNTIF(status = "NOT_SUBMITTED") AS Not_Submitted,
COUNTIF(status = "PARTNERED") AS Partnered,
COUNTIF(status = "PENDING") AS Pending,
COUNTIF(status = "SUSPENDED") AS Suspended,
COUNTIF(status = "REJECTED") AS Rejected,
FROM Programs
GROUP BY 1
ORDER BY Partnered DESC
最后 - 试试下面的一个(这是我的首选)
SELECT *
FROM (SELECT type, storenumber, status FROM Programs)
PIVOT (
COUNT(DISTINCT storenumber)
FOR status IN ("NOT_SUBMITTED", "PARTNERED", "PENDING", "SUSPENDED", "REJECTED")
)
ORDER BY PARTNERED DESC