MySQL: узнайте, в каком магазине покупатель потратил больше всего денег - PullRequest
0 голосов
/ 07 октября 2009

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

Существует 4 таблицы: Customer, Phone_Numbers, Sales_Header, Sales_Detail.

Запрос выглядит следующим образом:

SELECT CONCAT(customer.First_Name, ‘’, customer.Last_Name), 
       Phone_Numbers.Number, 
       Customer.ID 
FROM Sales_Header 
INNER JOIN Sales_Detail ON Sales_Detail.Header_ID = Sales_Header.ID 
INNER JOIN Customer ON Customer.ID = Sales_Header.Customer_ID 
INNER JOIN Phone_Numbers ON Phone_Numbers.Customer_ID = Customer.ID 
WHERE Sales_Header.WebSale = -1 
  AND Sales_Detail.Price > 1000 
  AND DateSold > 20081002

Вопрос:

Каждая продажа в sales_header имеет местоположение магазина (идентификатор магазина, в котором она была продана). Однако покупатели могут купить более чем в одном магазине. Мне нужно выяснить, в каком магазине клиент потратил больше всего денег, и добавить этот магазин к выводу оператора select выше.

Ответы [ 2 ]

1 голос
/ 07 октября 2009

Если вы используете MySQL, я считаю, что это:

SELECT CONCAT(customer.First_Name, ‘’, customer.Last_Name), 
       Phone_Numbers.Number, 
       Customer.ID, Sales_Detail.ID, Sum(Sales_Detail.Price) 
FROM Sales_Header 
INNER JOIN Sales_Detail ON Sales_Detail.Header_ID = Sales_Header.ID 
INNER JOIN Customer ON Customer.ID = Sales_Header.Customer_ID 
INNER JOIN Phone_Numbers ON Phone_Numbers.Customer_ID = Customer.ID 
WHERE Sales_Header.WebSale = -1 
  AND Sales_Detail.Price > 1000 
  AND DateSold > 20081002
GROUP BY CONCAT(customer.First_Name, ‘’, customer.Last_Name), 
       Phone_Numbers.Number, 
       Customer.ID, Sales_Detail.ID
ORDER BY Sum(Sales_Detail.Price) Desc Limit 1;

В SQL Server вы должны сделать «топ 1» перед Concat.

Кроме того, в зависимости от того, как располагаются ваши таблицы, вы также захотите поставить «отличный» (без скобок или запятых перед «concat»), чтобы удалить дубликаты.

0 голосов
/ 07 октября 2009

Попробуйте использовать SUM, GROUP BY и ORDER BY ... это помогает?

SELECT CONCAT(customer.First_Name, ‘’, customer.Last_Name), 
       Phone_Numbers.Number, 
       Customer.ID,
       SUM(Sales_Detail.Price) AS Total_Purchases
FROM Sales_Header 
INNER JOIN Sales_Detail ON Sales_Detail.Header_ID = Sales_Header.ID 
INNER JOIN Customer ON Customer.ID = Sales_Header.Customer_ID 
INNER JOIN Phone_Numbers ON Phone_Numbers.Customer_ID = Customer.ID 
WHERE Sales_Header.WebSale = -1 
  AND Sales_Detail.Price > 1000 
  AND DateSold > 20081002
GROUP BY Customer.ID
ORDER BY Total_Purchases
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...