gpt4 book ai didi

mysql - MYSQL JOINS查询(2表)

转载 作者:行者123 更新时间:2023-11-29 08:38:39 25 4
gpt4 key购买 nike

我是连接表的新手。我有一个表“Merchants”,如下所示

Merchant_Number    Merchant_Name
1 ABCD
2 DEFG

我有一个如下所示的“交易”表

Merchant_Number    Merchant_Name    Transaction_Amount
1 ABCD 100
3 XYZ 50
1 ABCD 50
4 nnn 200

我想连接上面两个表,结果如下

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

如何查询以获得如上所述的结果?

任何帮助将不胜感激!

最佳答案

您希望以相反的方式加入,这样您就可以包含所有商家,无论他们是否有交易(这就是 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)

<小时/>

正如我刚刚注意到的,您的数据没有标准化。您的交易表中有额外的商家,但您的商家表中未考虑这些商家。这会给你带来很多麻烦。

您应该找出原因并阻止它,最好的方法是从您的交易表中完全删除 Merchant_Name 列。如果您无法控制 table 设计,您应该与可以控制的人交谈:-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

关于mysql - MYSQL JOINS查询(2表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14485497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com