я эта таблица информации, содержащую порядка для двух заказов (orderID 1
и orderID 2
):Как правильно SUM() в моем запросе?
┌--------------------------------------┐
| orderID | productID | amount | price |
├--------------------------------------┤
| 1 | 1 | 5 | 19.95 |
| 1 | 2 | 2 | 12.95 |
| 1 | 3 | NULL | 3.49 |
| 1 | 4 | NULL | 1.49 |
| 1 | 5 | NULL | 0.99 |
| 2 | 1 | 11 | 19.95 |
| 2 | 2 | 4 | 12.95 |
| 2 | 3 | NULL | 3.49 |
└--------------------------------------┘
идентификаторов продуктов 1
и 2
являются предметами, где заказчик может выбрать произвольное количество элементов.
Все продукты с идентификаторами свыше 2
являются обновлениями к продукту ID 1
, поэтому заказчик не может выбрать сумму, но только выбрал ее или не выбрал.
Теперь я хочу рассчитать окончательный SUM()
каждого заказа.
Правильная формула для первого заказа будет
5 * 19.95
+ 2 * 12.95
+ 5 * 3.49
+ 5 * 1.49
+ 5 * 0.99
-----------
= 155.50
Так что я начал определять мой запрос, как это:
SELECT
`orderID`,
SUM(
CASE
WHEN `amount` IS NOT NULL
THEN `amount` * `price`
ELSE `price`
END
) AS `total`
FROM `orders`
GROUP BY `orderID`
Но проблема теперь, что все дополнительные элементы (с productID > 2
) подсчитываются только один раз, но я нуждаюсь в них столько раз, сколько выбрано productID 1
. Как я могу получить доступ к amount
из productID 1
в моем запросе?
Мне сложно понять почему, но это работает; благодаря! –
Он присоединяется к таблице против себя. Или заказы (a) - это каждая строка, а заказы (b) - это только первый идентификатор продукта для этого порядка. Coalesce дает первое непустое значение, поэтому, если a имеет сумму, которую он использует, но если он не использует сумму из b. – Kickstart
Я вижу, потрясающе! Большое спасибо! –