SQL Запрос Найти строку, которая в качестве максимального значения с группировкой по - PullRequest
2 голосов
/ 27 января 2020

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

Ввод:

enter image description here

Критерии:

  1. он должен извлечь максимальную комбинацию
  2. дублирование местоположения не должно наступить
  3. если значение комбинации одинаково, то он должен извлечь первую строку

Resulant:

enter image description here

Ответы [ 3 ]

3 голосов
/ 27 января 2020
SELECT DISTINCT
location_id,
FIRST_VALUE(beverage_name) 
    OVER (PARTITION BY location_id 
          ORDER BY combination_count DESC, beverage_id DESC) beverage_name,
FIRST_VALUE(beverage_id) 
    OVER (PARTITION BY location_id 
          ORDER BY combination_count DESC, beverage_id DESC) beverage_id,
FIRST_VALUE(combination_count) 
    OVER (PARTITION BY location_id 
          ORDER BY combination_count DESC, beverage_id DESC) combination_count 
FROM source_table
0 голосов
/ 27 января 2020

Вы можете использовать простую функцию ранга (нужно получить ранг в Mysql) и получить результат.

  select * from (           
      select location_id,beverage_name,beverage_id,combination_count,(case when location_id when @location_id then @curRank:=curRank+1 else @curRank:=1 and @location_id :=location_id end) as rank 
      from your_table t1,(SELECT @curRank := 0,@location_id :='') r 
         order by combination_count desc
    ) where rank=1;
0 голосов
/ 27 января 2020

Это также альтернативный код для ожидаемого вывода.

SELECT DISTINCT * из source_table GROUP BY location_id;

...