在重写查询时需要帮助

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
  • 让仓库变大。