Это мой первый вопрос по stackoverflow, поэтому я стараюсь не облажаться. Я несколько часов почесываю голову над этим запросом и не могу добиться никакого прогресса.
Я использую вид, в котором есть несколько бронирований. Все эти заказы имеют метод payment_method, например PayPal или кредитная карта.
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