Complex Group By子句按一些列计算 - Informix

时间:2015-10-14 05:38:15

标签: database group-by informix

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

它可能包含重复的trans_id值,某些trans_id值甚至可能包含某些记录的 null 值。

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

在这样做的同时,如果重复trans_id并且trans_id为空,那么我应该只计算一次记录,那么对于每个 null <我应该将其计为 1 / strong> trans_id

因此,例如,如果我有10张卡号 12345678 的记录,其中重复3 trans_id个值(总共6个),并且一个trans_id是唯一的并且其余3 trans_id nulls 然后我应该将该计数作为 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;

1 个答案:

答案 0 :(得分:0)

如果我做到了这一点,您需要唯一trans_id的数量加上 NULL trans_id的行数。试试这个:

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