1

原始查询如下:

SELECT
     id
    ,COUNT(A_NO) AS count
FROM table1
WHERE date = '2022-02-02'
AND p_no IS NOT NULL
GROUP BY id; 

p_no IS NOT NULL我需要通过不使用WHERE 子句中的条件来重写上述查询。所以我尝试了以下 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 查询?

4

1 回答 1

2

你的 COUNT_IF 看起来不错。

但是您可以使用NVL2,它根据第一个空值返回第二个或第三个值,因此 when p_nois not null count a_noelse count NULL(不计算在内)

SELECT
     id
    ,CASE(NVL2(p_no , a_no, NULL)) AS count
FROM table1
WHERE date = '2022-02-02'
GROUP BY id;

后续步骤的顺序:

  • 如果DATE不是 aDATE/TIMESTAMP并且是 aVARCHAR/TEXT则将其存储为真实日期。
  • 按 DATE 对表/数据进行排序/聚类
  • 把仓库做大。
于 2022-02-21T08:34:59.777 回答