【发布时间】:2018-07-01 20:41:23
【问题描述】:
这是我关于 stackoverflow 的第一个问题,所以我尽量不搞砸。我在这个查询上摸索了几个小时,但没有任何进展。
我使用一个视图,其中包含多个预订。所有这些预订都有一个 payment_method 例如贝宝或信用卡。
Customer Name | Price | payment_method
John Doe | 20 | creditcard
Susan Soe | 10 | paypal
通过我的 sql 查询,我试图获取所有 payment_methods 的总和。不幸的是,本月未使用的 payment_methods 没有出现。
所以我创建了一个名为 PaymentMethods 的附加表,其中包含 Methods 列。
Methods
creditcard
premium
sofort
bank
paypal
然后我尝试使用LEFT JOIN 来获得这样的结果:
payment_method | TotalQuantity (->sum(price))
creditcard | 20
premium | 0
sofort | 0
bank | 0
paypal | 10
但相反,我只得到那些在那个月已经使用了 payment_method 的金额。
payment_method | TotalQuantity (-> sum(price))
creditcard | 20
paypal | 10
这是我的声明。我真的很感激我在这里做错了什么。
SELECT payment_method, SUM(IFNULL(price,0)) AS TotalQuantity
FROM PaymentMethods
LEFT JOIN PaymentMethods
ON SlotBookingsFullView.payment_method=PaymentMethods.Methods
WHERE (booking_date BETWEEN '2018-07-01 00:00:00' AND '2018-07-30 23:59:59')
* 编辑 *
m0lochwalker 指出我应该使用GROUP BY 子句...我有它,但它是在复制和粘贴操作期间得到的。这里是。
GROUP BY PaymentMethods.Methods ORDER BY PaymentMethods.Methods DESC
【问题讨论】:
-
您的结果就是 LEFT JOIN 会做的事情。您应该 SUM TotalQuantity 和 Group By payment_method。您看过 Group By 子句吗?类似的东西:
-
您的查询中还有一个错字:
FROM PaymentMethods LEFT JOIN PaymentMethods当然必须是FROM PaymentMethods LEFT JOIN SlotBookingsFullView。