按某些列计数的复杂 Group By 子句 - Informix
Complex Group By clause to count by some column - Informix
在 informix 数据库中,我有一个名为 transactions
的 table,其中我有 trans_id
、card_number
、trans_date
和 trans_status
列。
它可以有重复的 trans_id
值,一些 trans_id
值甚至可能有一些记录的 null 值。
现在,我需要根据 card_number
、trans_date
和 trans_status
对这些记录进行分组。
这样做时,如果 trans_id
重复,我应该只计算一次记录,如果 trans_id
为空,那么我应该将其计算为 1 空 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;
如果我没猜错,您需要唯一 trans_id
的数量加上具有 NULL trans_id
的行数。试试这个:
SELECT card_number,
COUNT(UNIQUE trans_id) + (COUNT(*) - COUNT(trans_id)) AS cnt
FROM transactions
GROUP BY card_number
在 informix 数据库中,我有一个名为 transactions
的 table,其中我有 trans_id
、card_number
、trans_date
和 trans_status
列。
它可以有重复的 trans_id
值,一些 trans_id
值甚至可能有一些记录的 null 值。
现在,我需要根据 card_number
、trans_date
和 trans_status
对这些记录进行分组。
这样做时,如果 trans_id
重复,我应该只计算一次记录,如果 trans_id
为空,那么我应该将其计算为 1 空 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;
如果我没猜错,您需要唯一 trans_id
的数量加上具有 NULL trans_id
的行数。试试这个:
SELECT card_number,
COUNT(UNIQUE trans_id) + (COUNT(*) - COUNT(trans_id)) AS cnt
FROM transactions
GROUP BY card_number