我是新手加入桌子。 我有一个表'商家',如下所示
Merchant_Number Merchant_Name
1 ABCD
2 DEFG
我有一个表'Transactions',如下所示
Merchant_Number Merchant_Name Transaction_Amount
1 ABCD 100
3 XYZ 50
1 ABCD 50
4 nnn 200
我想加入上面的2个表格,结果如下所示
Merchant_Number Merchant_Name Transaction Amount No. Of Transactions
1 ABCD 150 2
2 DEFG 0 0
3 XYZ 50 1
4 nnn 200 1
交易金额是同一商家的金额总和 交易数量是商家使用其交易的次数 商家ABCD有2笔交易,总交易金额为150
我有一个查询
SELECT Merchant_Name, sum(transaction_amount) as 'Transaction Amount',
count(*) as 'No. Of Transactions'
FROM Transactions
LEFT JOIN Merchants using (MERCHANT_NUMBER)
group by Merchant_Name
但这只给了我交易表中的商家,即
Merchant_Number Merchant_Name Transaction Amount No. Of Transactions
1 ABCD 150 2
3 XYZ 50 1
4 nnn 200 1
如何查询我的结果,如上所述?
任何帮助都将受到高度赞赏!
答案 0 :(得分:2)
您希望以相反的方式加入,这样您就可以包含所有商家是否有交易(这是LEFT JOIN的作用):
SELECT Merchant_Name, sum(transaction_amount) as `Transaction Amount`,
count(*) as `No. Of Transactions`
FROM Merchants
LEFT JOIN Transactions using (MERCHANT_NUMBER)
group by Merchant_Name
当然,您可以将查询更改为写入RIGHT JOIN
(而不是LEFT JOIN
),但我发现这只会使代码难以阅读,因此我倾向于避免使用它们。
请注意您所写的查询是否符合您的经验;它显示所有交易是否有商家(FROM Transactions LEFT JOIN Merchants
)
正如我刚才注意到的那样,您的数据未正常化。您在交易表中有额外的商家,这些商家在您的商家表中没有计入。这会给你带来很多麻烦。
你应该知道这是做什么并阻止它,最好的方法是从你的Transactions表中删除Merchant_Name
列。如果您无法控制桌面设计,则应与执行以下操作的人交谈:-P。除此之外,试试:
SELECT Merchant_Name, sum(transaction_amount) as `Transaction Amount`,
count(*) as `No. Of Transactions`
FROM
(
SELECT Merchant_Name, Merchant_Number
FROM Merchants
UNION
SELECT Merchant_Name, Merchant_Number
FROM Transactions
) Real_Merchants
LEFT JOIN Transactions using (MERCHANT_NUMBER)
group by Merchant_Name
答案 1 :(得分:0)
你几乎拥有它,只需交换Merchants
和Transaction
:
SELECT Merchant_Name, SUM(transaction_amount) AS 'Transaction Amount',
COUNT(*) AS 'No. Of Transactions'
FROM Merchants
LEFT JOIN Transactions using (MERCHANT_NUMBER)
GROUP BY Merchant_Name
答案 2 :(得分:0)
当你想要LEFT JOIN中特定表的所有行时,你需要先命名该表。
所以FROM商家LEFT JOIN交易会给你你想要的东西。
答案 3 :(得分:0)
更改查询中表格的顺序 - Merchants LEFT JOIN Transactions
。然后,您将需要用零替换一些NULL值。像这样:
SELECT Merchant_Name, ISNULL(SUM(transaction_amount), 0) AS 'Transaction Amount',
COUNT(*) AS 'No. Of Transactions'
FROM Merchants
LEFT JOIN Transactions using (MERCHANT_NUMBER)
GROUP BY Merchant_Name