按某些列计数的复杂 Group By 子句 - Informix

Complex Group By clause to count by some column - Informix

在 informix 数据库中,我有一个名为 transactions 的 table,其中我有 trans_idcard_numbertrans_datetrans_status 列。

它可以有重复的 trans_id 值,一些 trans_id 值甚至可能有一些记录的 null 值。

现在,我需要根据 card_numbertrans_datetrans_status 对这些记录进行分组。

这样做时,如果 trans_id 重复,我应该只计算一次记录,如果 trans_id 为空,那么我应该将其计算为 1 trans_id.

因此,例如,如果我有 10 条卡号 12345678 的记录,其中重复了 3 个 trans_id 值(总共 6 个)和一个 trans_id 是唯一的,剩下的 3 个 trans_idnulls 那么我应该得到 7 对于 该卡号。

我尝试了以下在 MySQL 中运行的查询,但同样的查询在 Informix 数据库中失败,它给出了表达式必须在 group by 子句中的错误。

SELECT 
    card_number, 
    (COUNT(*)+nulltransids-1) 
FROM (
        (SELECT 
            trans_id, 
            card_number, 
            (COUNT(*)-COUNT(trans_id)) AS nulltransids 
        FROM test.transactions 
        GROUP BY trans_id,card_number
        ) AS trans
    ) 
GROUP BY card_number;

如果我没猜错,您需要唯一 trans_id 的数量加上具有 NULL trans_id 的行数。试试这个:

SELECT card_number,
        COUNT(UNIQUE trans_id) + (COUNT(*) - COUNT(trans_id)) AS cnt
FROM transactions
GROUP BY card_number