MySQL - Как рассчитать произведение нескольких строк одного столбца - PullRequest
0 голосов
/ 26 марта 2020

У меня есть следующая таблица:

select * from bestelldetails WHERE `Bestell-Nr` = 10870;
+------------+------------+-------------+--------+--------+
| Bestell-Nr | Artikel-Nr | Einzelpreis | Anzahl | Rabatt |
+------------+------------+-------------+--------+--------+
|      10870 |         35 |          18 |      3 |      0 |
|      10870 |         51 |          53 |      2 |      0 |
+------------+------------+-------------+--------+--------+

Теперь сначала я вычислил произведение каждой строки "Einzelpreis (= цена за штуку)" и "Anzahl (штуки)" следующим образом:

select *, Einzelpreis * Anzahl AS Rechnungssumme from bestelldetails WHERE `Bestell-Nr` = 10870;
+------------+------------+-------------+--------+--------+----------------+
| Bestell-Nr | Artikel-Nr | Einzelpreis | Anzahl | Rabatt | Rechnungssumme |
+------------+------------+-------------+--------+--------+----------------+
|      10870 |         35 |          18 |      3 |      0 |             54 |
|      10870 |         51 |          53 |      2 |      0 |            106 |
+------------+------------+-------------+--------+--------+----------------+

Но теперь я хочу СУММУ каждого набора данных "Bestell-Nr". Я пытался так:

select *, Einzelpreis * Anzahl AS Rechnungssumme from bestelldetails WHERE `Bestell-Nr` = 10870 GROUP BY `Bestell-Nr`;
+------------+------------+-------------+--------+--------+----------------+
| Bestell-Nr | Artikel-Nr | Einzelpreis | Anzahl | Rabatt | Rechnungssumme |
+------------+------------+-------------+--------+--------+----------------+
|      10870 |         35 |          18 |      3 |      0 |             54 |
+------------+------------+-------------+--------+--------+----------------+

Но это, очевидно, не работает. Внутри «Rechnungssumme» отображается только произведение ОДНОЙ записи, а не сумма всех значений, собранных из каждого набора данных.

В моем реальном случае использования будут десятки тысяч различных заказов, каждый со своим собственным "Bestell-Nr". Для каждого из этих заказов эта операция должна создать агрегированные строки, в которых необходимо рассчитать и правильно отобразить сумму продуктов каждой строки.

1 Ответ

1 голос
/ 26 марта 2020

Это то, что вам нужно?:

select sum(Anzahl) as Anazahl, sum(`Artikel-Nr`) as `Artikel-Nr`, sum(Einzelpreis) as Einzelpreis, sum(Rabatt) as  Rabatt, sum(Einzelpreis * Anzahl) as Rechnungssumme, `Bestell-Nr` from bestelldetails GROUP BY `Bestell-Nr` HAVING `Bestell-Nr`=10870
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...