SQl 将多个 CTE 的计数合并为一个 table
SQl get counts from multiple CTEs into one table
我有多个 CTE,它们都来自同一个 table,“table1”。他们 return 只是行数。每个 CTE 之间的差异是 where 语句的内容,因为我想在进行这些小更改时比较计数。代码如下:
WITH cte1 AS(
SELECT COUNT(*)
FROM table1
WHERE....
), cte2 AS(
SELECT COUNT(*)
FROM table1
WHERE....
), cte3 AS(
SELECT COUNT(*)
FROM table 1
WHERE....
)
我想获得一个输出,其中我从每个 CTE 获得所有计数并将它们集中在一个 table 中,例如:
cte1 cte2 cte3
1,564 3,567 2,861
SELECT
(SELECT COUNT(*) FROM table1 WHERE....) as cte1,
(SELECT COUNT(*) FROM table1 WHERE....) as cte2,
(SELECT COUNT(*) FROM table1 WHERE....) as cte3
只要你所有的 CTE return 只有 1 行,你就可以对所有的 CTE 进行笛卡尔积(所有都在没有连接的 from 子句中)。我相信您需要为您的 count(*) 表达式提供一个列别名,以便将它们也包含在您的 CTE 中。
WITH cte1 AS(
SELECT COUNT(*) cnt
FROM table1
WHERE....
), cte2 AS(
SELECT COUNT(*) cnt
FROM table1
WHERE....
), cte3 AS(
SELECT COUNT(*) cnt
FROM table 1
WHERE....
)
SELECT cte1.cnt AS cte1, cte2.cnt AS cte2, cte3.cnt AS cte3
FROM cte1, cte2, cte3
此外,如果您的 CTE 中没有任何联接,您可以 运行 通过使用 sum case 表达式同时进行计数,这可能会提高性能。
SELECT SUM(CASE WHEN /* where clause 1 */ THEN 1 ELSE 0 END) cte1,
SUM(CASE WHEN /* where clause 2 */ THEN 1 ELSE 0 END) cte2,
SUM(CASE WHEN /* where clause 3 */ THEN 1 ELSE 0 END) cte3
FROM table1
我有多个 CTE,它们都来自同一个 table,“table1”。他们 return 只是行数。每个 CTE 之间的差异是 where 语句的内容,因为我想在进行这些小更改时比较计数。代码如下:
WITH cte1 AS(
SELECT COUNT(*)
FROM table1
WHERE....
), cte2 AS(
SELECT COUNT(*)
FROM table1
WHERE....
), cte3 AS(
SELECT COUNT(*)
FROM table 1
WHERE....
)
我想获得一个输出,其中我从每个 CTE 获得所有计数并将它们集中在一个 table 中,例如:
cte1 cte2 cte3
1,564 3,567 2,861
SELECT
(SELECT COUNT(*) FROM table1 WHERE....) as cte1,
(SELECT COUNT(*) FROM table1 WHERE....) as cte2,
(SELECT COUNT(*) FROM table1 WHERE....) as cte3
只要你所有的 CTE return 只有 1 行,你就可以对所有的 CTE 进行笛卡尔积(所有都在没有连接的 from 子句中)。我相信您需要为您的 count(*) 表达式提供一个列别名,以便将它们也包含在您的 CTE 中。
WITH cte1 AS(
SELECT COUNT(*) cnt
FROM table1
WHERE....
), cte2 AS(
SELECT COUNT(*) cnt
FROM table1
WHERE....
), cte3 AS(
SELECT COUNT(*) cnt
FROM table 1
WHERE....
)
SELECT cte1.cnt AS cte1, cte2.cnt AS cte2, cte3.cnt AS cte3
FROM cte1, cte2, cte3
此外,如果您的 CTE 中没有任何联接,您可以 运行 通过使用 sum case 表达式同时进行计数,这可能会提高性能。
SELECT SUM(CASE WHEN /* where clause 1 */ THEN 1 ELSE 0 END) cte1,
SUM(CASE WHEN /* where clause 2 */ THEN 1 ELSE 0 END) cte2,
SUM(CASE WHEN /* where clause 3 */ THEN 1 ELSE 0 END) cte3
FROM table1