模拟 COUNTIF 的雪花子查询
Snowflake subquery to simulate COUNTIF
我有以下查询,为什么我试图跨两个表模拟 COUNTIF
:
WITH Range__A1_A4 (val) AS (
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 8 UNION ALL
SELECT 10
), NFL (SEASON, TEAM, WINS) AS (
SELECT 2010, 'KC', 10 UNION ALL
SELECT 2011, 'GB', 11
)
SELECT
(SELECT SUM(CASE WHEN NFL.WINS>R.val THEN 1 ELSE 0 END) FROM Range__A1_A4 R) ct,
*
FROM NFL;
由此我得到以下错误:
Unsupported subquery type cannot be evaluated
这个查询有什么问题,修复它的正确方法是什么?
我会这样写:
WITH Range__A1_A4 (val) AS (
SELECT * FROM VALUES
(1),
(2),
(8),
(10)
), NFL (SEASON, TEAM, WINS) AS (
SELECT * FROM VALUES
(2010, 'KC', 10),
(2011, 'GB', 11)
)
SELECT
n.*,
SUM(iff( n.wins > r.val, 1, 0)) as ct_a,
count_if(n.wins > r.val) as ct_b
FROM NFL AS n
JOIN Range__A1_A4 AS r
group by 1,2,3;
SEASON
TEAM
WINS
CT
CT_B
2,010
KC
10
3
3
2,011
GB
11
4
4
我有以下查询,为什么我试图跨两个表模拟 COUNTIF
:
WITH Range__A1_A4 (val) AS (
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 8 UNION ALL
SELECT 10
), NFL (SEASON, TEAM, WINS) AS (
SELECT 2010, 'KC', 10 UNION ALL
SELECT 2011, 'GB', 11
)
SELECT
(SELECT SUM(CASE WHEN NFL.WINS>R.val THEN 1 ELSE 0 END) FROM Range__A1_A4 R) ct,
*
FROM NFL;
由此我得到以下错误:
Unsupported subquery type cannot be evaluated
这个查询有什么问题,修复它的正确方法是什么?
我会这样写:
WITH Range__A1_A4 (val) AS (
SELECT * FROM VALUES
(1),
(2),
(8),
(10)
), NFL (SEASON, TEAM, WINS) AS (
SELECT * FROM VALUES
(2010, 'KC', 10),
(2011, 'GB', 11)
)
SELECT
n.*,
SUM(iff( n.wins > r.val, 1, 0)) as ct_a,
count_if(n.wins > r.val) as ct_b
FROM NFL AS n
JOIN Range__A1_A4 AS r
group by 1,2,3;
SEASON | TEAM | WINS | CT | CT_B |
---|---|---|---|---|
2,010 | KC | 10 | 3 | 3 |
2,011 | GB | 11 | 4 | 4 |