获取非空查询结果的行,同时按未命中但也不为空的列计算行数

问题描述 投票:0回答:1

我想在计算 num_zaprosa 和 num_otveta 的计数时考虑所有记录,但如果其中之一为空,则不在结果集中显示它们。是否有可能做到这一点?这是我的代码,但它并没有帮助我解决我的问题:

WITH counted_records AS (
    SELECT num_zaprosa, num_otveta,
        COUNT(*) AS count_all_records,
        SUM(CASE WHEN num_zaprosa IS NOT NULL THEN 1 ELSE 0 END) AS count_num_zaprosa,
        SUM(CASE WHEN num_otveta IS NOT NULL THEN 1 ELSE 0 END) AS count_num_otveta
    FROM your_table
    GROUP BY num_zaprosa, num_otveta
)
SELECT num_zaprosa, num_otveta, count_all_records, count_num_zaprosa, count_num_otveta
FROM counted_records
WHERE num_zaprosa IS NOT NULL OR num_otveta IS NOT NULL;

初始数据:

num_zaprosa|num_otveta
______________________
 2344      |   200          

  22       |   null  
 
 2344      |    200

 155       |    6

 22        |    9999

我期望什么结果:

num_zaprosa|num_otveta| count_num_zaprosa| count_num_otveta |
_____________________________________________________________
 2344      |   200    |        2         |          2       |
_____________________________________________________________
 22        |   9999   |        2         |          1       |
_____________________________________________________________
   155     |     6    |         1        |          1       |
sql firebird
1个回答
0
投票
WITH counted_records AS (
    SELECT num_zaprosa, num_otveta,
        COUNT(*) AS count_all_records,
        SUM(COUNT(num_zaprosa)) OVER () AS count_num_zaprosa,
        SUM(COUNT(num_otveta)) OVER () AS count_num_otveta
    FROM your_table
    GROUP BY num_zaprosa, num_otveta
)
SELECT num_zaprosa, num_otveta, count_all_records, count_num_zaprosa, count_num_otveta
FROM counted_records
WHERE num_zaprosa IS NOT NULL OR num_otveta IS NOT NULL;
© www.soinside.com 2019 - 2024. All rights reserved.