在重写查询时需要帮助
Need help in rewriting the query
原查询如下:
SELECT
id
,COUNT(A_NO) AS count
FROM table1
WHERE date = '2022-02-02'
AND p_no IS NOT NULL
GROUP BY id;
我需要通过不在 WHERE 子句中使用 p_no IS NOT NULL
条件来重写上述查询。所以我尝试了以下 2 个查询,但它们需要很长时间才能执行
SELECT
id
,SUM(CASE WHEN A_NO IS NOT NULL AND p_no IS NOT NULL THEN 1 ELSE 0 END) AS count
FROM table1
WHERE date = '2022-02-02'
GROUP BY id;
SELECT
id
,COUNT_IF(A_NO IS NOT NULL AND p_no IS NOT NULL) AS count
FROM table1
WHERE date = '2022-02-02'
GROUP BY id;
有没有其他方法可以重写 SQL 查询?
你的COUNT_IF看起来还不错。
但您可以使用 NVL2,其中 returns 第二个或第三个值取决于第一个 null-ness,因此当 p_no
不为空时计数 a_no
否则计数 NULL
(不算数)
SELECT
id
,CASE(NVL2(p_no , a_no, NULL)) AS count
FROM table1
WHERE date = '2022-02-02'
GROUP BY id;
后续步骤的顺序:
- 如果
DATE
不是 DATE/TIMESTAMP
而是 VARCHAR/TEXT
则将其存储为真实日期。
- Order/Cluster 你 table/data DATE
- 让仓库变大。
原查询如下:
SELECT
id
,COUNT(A_NO) AS count
FROM table1
WHERE date = '2022-02-02'
AND p_no IS NOT NULL
GROUP BY id;
我需要通过不在 WHERE 子句中使用 p_no IS NOT NULL
条件来重写上述查询。所以我尝试了以下 2 个查询,但它们需要很长时间才能执行
SELECT
id
,SUM(CASE WHEN A_NO IS NOT NULL AND p_no IS NOT NULL THEN 1 ELSE 0 END) AS count
FROM table1
WHERE date = '2022-02-02'
GROUP BY id;
SELECT
id
,COUNT_IF(A_NO IS NOT NULL AND p_no IS NOT NULL) AS count
FROM table1
WHERE date = '2022-02-02'
GROUP BY id;
有没有其他方法可以重写 SQL 查询?
你的COUNT_IF看起来还不错。
但您可以使用 NVL2,其中 returns 第二个或第三个值取决于第一个 null-ness,因此当 p_no
不为空时计数 a_no
否则计数 NULL
(不算数)
SELECT
id
,CASE(NVL2(p_no , a_no, NULL)) AS count
FROM table1
WHERE date = '2022-02-02'
GROUP BY id;
后续步骤的顺序:
- 如果
DATE
不是DATE/TIMESTAMP
而是VARCHAR/TEXT
则将其存储为真实日期。 - Order/Cluster 你 table/data DATE
- 让仓库变大。