SQL сравнивает тот же столбец, но зависит от других столбцов - PullRequest
0 голосов
/ 06 ноября 2018

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

Customer = CustomerNr (Int)
     - Name (varchar)
     - Adress (varchar)
     - Country (int)
     - Phone (char)

Order = OrderNr (Int)
     - Customer (int)
     - Status (char)
     - Total Price (Decimal)
     - Order date(date)
     - Producer (char)

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Правильный способ написания запроса использует оконные функции:

select co.*
from (select co.CustomerNr, co.name, o.order_date, sum(o.total_price) as total_price,
             max(sum(o.total_price)) over (partition by order_date) as max_daily_total_price
      from order o join
           customer co
           on co.CustomerNr = o.Customer
      group by co.CustomerNr, co.name, order_date
     ) co
where total_price = max_daily_total_price;
0 голосов
/ 06 ноября 2018

Вы ищете наибольшую общую цену на дату заказа, производителя, поэтому вы можете использовать, например,

   with totalprice(customer, order_date, producer, sum_total_price) as
   (
      select customer, order_date, producer, sum(total_price) sum_total_price
      from order
      group by customer, order_date, producer
   )
   select * 
   from totalprice t1
   where sum_total_price = (
       select max(sum_total_price)
       from totalprice t2
       where t1.order_date = t2.order_date and t1.producer = t2.producer
   )

и тот же запрос без WITH

   select * 
   from (
      select customer, order_date, producer, sum(total_price) sum_total_price
      from order
      group by customer, order_date, producer
   ) t1
   where sum_total_price = (
       select max(sum_total_price)
       from (
         select customer, order_date, producer, sum(total_price) sum_total_price
         from order
         group by customer, order_date, producer
       ) t2
       where t1.order_date = t2.order_date and t1.producer = t2.producer
   )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...