Я пытаюсь найти лучшую комбинацию двух столбцов в данной схеме:

Название таблицы: Sales

Столбцы: price, zip_code, color

В этом примере я хотел бы найти Наивысший объем продаж (определяемый ценой) на основе наилучшей комбинации zip_code и color.

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

Любая помощь будет оценена :)

Редактировать:

Данных:

 price  |  zip_code | color
--------+-----------+--------
    11  |   1455    |   red
--------+-----------+--------
    2   |   1455    |   red
--------+-----------+--------
    12  |   1452    |   blue
--------+-----------+--------
    3   |   1451    |   pink
--------+-----------+--------
    4   |   1455    |   pink
--------+-----------+--------

Желаемый результат:

price   |  zip_code | color
--------+-----------+--------
   13   |   1455    |   red
1
likwidmonster 8 Окт 2018 в 03:09

2 ответа

Лучший ответ

Если вам нужна только одна строка строки - даже если есть связи - тогда достаточно group by и limit:

select zip_code, color, sum(price) as total_sales
from Sales
group by zip_code, color
order by total_sales desc
limit 1;

Если вам нужны все верхние строки, потребуется немного больше логики:

with zc as (
      select zip_code, color, sum(price) as total_sales
      from Sales
      group by zip_code, color
     )
select zc.*
from zc
where zc.total_sales = (select max(zc2.total_sales) from zc zc2);
1
Gordon Linoff 8 Окт 2018 в 01:01

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

Select zip_code, color, sum(price) as total_sales
From Sales
Group by zip_code, color
Order by total_sales desc
limit 1;
0
Yogesh Sharma 8 Окт 2018 в 09:57