查询MYSQL JOINS(2个表)

时间:2013-01-23 17:16:24

标签: mysql

我是新手加入桌子。 我有一个表'商家',如下所示

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

如何查询我的结果,如上所述?

任何帮助都将受到高度赞赏!

4 个答案:

答案 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)

你几乎拥有它,只需交换MerchantsTransaction

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
相关问题