Сумма по многостоловым таблицам - PullRequest
0 голосов
/ 29 мая 2018

У меня 4 таблицы

customers
sales
sale_items
stock_items

Я хочу перечислить всех своих клиентов.Для каждого покупателя я хочу получить общую сумму покупки - поле, которое я хочу создать в SQL-запросе (xxx как totalSales)

Я попытался выбрать клиентов в качестве основной таблицы и присоединить к ней другие таблицы.Я попытался выбрать продажи в качестве основной таблицы, а также sale_items.Я вроде получил правильное вычисление суммы, но он покажет мне первого клиента первым.

Вот как выглядят мои таблицы:

*TABLE customers*
id
customer_name
email

*TABLE sales*
id
customer_id
transaction_date

*TABLE sale_items*
id
sale_id
stock_item_id

*TABLE stock_items*
id
item_name
price

Я хочу

  • Создайте список всех клиентов, отсортированных по клиенту с наибольшим объемом продаж (в стоимостном выражении).Не счет продаж, а общая сумма (объем продаж) продаж
  • Отображение товаров, купленных на одного клиента, под именем клиента.Это будет не за заказ, а за все продажи.Таким образом, если клиент X купил банку кофе с количеством из 4-х заказов, банка кофе будет отображаться 4 раза.Хотя, если возможно, я бы хотел, чтобы элементы перечислялись в алфавитном порядке.

Я внутренне соединил таблицы друг с другом, поэтому я получил бы список всех транзакций.Я пробовал SELECT * FROM клиентов, пробовал FROM sales, пробовал from sale_items.Я попробовал GROUP_BY customer_id, но тогда я получу неправильные значения.

Я хочу отобразить данные как таковые.

CUSTOMER                    ITEMS                   TOTAL VALUE
John Doe                    Coffee
                            Milk
                            Tea
                            Milk
                            Bread
                            Coffee                  500

Jane Doe                    Coffee
                            Milk
                            Coke                    350

Denver Doe                  Coffee
                            Milk
                            Bread
                            Bread                   125

Я не хочу использовать PHP и делатьзапрос для каждой "вещи".Я пытаюсь выполнить один или два запроса.

1 Ответ

0 голосов
/ 29 мая 2018

Я не думаю, что вы сможете получить их в отдельных строках, как вы показываете (если вы не посмотрите на функцию ROLLUP), но это, вероятно, не является обязательным для вас.

Я думаю, вы должны использовать GROUP_CONCAT, что-то вроде функции агрегации вроде SUM, но она создает список через запятую из всех значений:

SELECT 
*
SUM(sale_amount) as total_sales,
GROUP_CONCAT(item_name) as item_names
FROM customers c
JOIN sales s USING (customer_id)
JOIN sale_items si USING (sale_id)
JOIN stock_items sit USING (stock_item_id)
GROUP BY customer_id

Что вы должны увидетьПример строки:

Denver Doe     Coffee,Milk,Bread,Bread     125

(Мне пришлось составить несколько имен столбцов, например, sale_amount, но я уверен, что они должны быть там. Вам нужно будет внести некоторые коррективы в этиимена и, возможно, в том, как я сделал соединения, но это должно работать с некоторыми изменениями, если я понимаю ваши потребности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...