我有原始交易数据,其中包含交易编号和卡号。不幸的是,卡号不会在交易的每一行重复,因此存在空白。我想用卡号来总结数据,所以我需要填补空白(我想)。
我正在处理这个问题的方法是创建一个唯一的交易号和卡号查找,将卡号与原始数据匹配,然后按卡号进行汇总。
我附上了一个小图:
任何帮助改善这一过程的人都将不胜感激。摆脱查找步骤会很好!
答案 0 :(得分:2)
只是一个例子,但应该有效:
SELECT r.cardId AS `Card Number`,
COUNT(*) AS `# of Transactions`,
SUM(t.sales) AS `Total Sales`
FROM transactions t
JOIN (SELECT transactionId, cardId
FROM transactions
WHERE cardId IS NOT NULL OR
cardId != ''
) AS r
ON r.transactionId = t.transactionId
GROUP BY t.transactionId
基本上我正在做的是:
transactionId
分组的所有结果,这样我们就可以轻松计算交易次数并总计销售总额。cardId
。结果应该是你所描述的。
CARD NUMBER # OF TRANSACTIONS TOTAL SALES
5845 3 141
3957 5 177
对于原始+匹配结果:
SELECT t.transactionId,
r.cardId,
t.sales
FROM transactions t
JOIN (SELECT transactionId, cardId
FROM transactions
WHERE cardId IS NOT NULL OR
cardId != ''
) AS r
ON r.transactionId = t.transactionId
要更新空结果,您可以使用UPDATE
,如下所示:
UPDATE transactions t
JOIN (SELECT transactionId, cardId
FROM transactions
WHERE cardId IS NOT NULL OR
cardId != ''
) AS m
ON m.transactionId = t.transactionId
SET t.cardId = m.cardId
WHERE t.cardId IS NULL OR
t.cardId = ''