Postgresql: получить максимальное значение из временной таблицы? - PullRequest
0 голосов
/ 13 июля 2020

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

 WITH country_sold AS ( 
   SELECT l.country, sum(r.sold) as count 
   FROM Label as l, released as r 
   WHERE l.label_name = r.label_name  
   GROUP BY l.country
 )

Запрос SELECT * FROM country_sold; возвращает:

Country Sold

USA     3232322
England 1232

Вопрос в том, как сделать я получаю максимальное значение из этой временной таблицы (в данном случае очевидно, что это США с большим количеством проданных штук)?

Я пробовал:

SELECT max(sold) FROM country_sold;

и это возвращает мне максимальное число (значение из США), но как я могу также получить страну? Когда я пытаюсь использовать

SELECT country, max(sold) FROM country_sold GROUP BY country; 

, но это просто вернет мне исходный результат из country_sold, только с другим именем столбца, как показано выше:

Country max

USA     3232322
England 1232

Что я отсутствует?

Всем заранее спасибо!

Ответы [ 2 ]

1 голос
/ 13 июля 2020

См. здесь пример в postgresql документах:

SELECT city FROM weather
WHERE temp_lo = (SELECT max(temp_lo) FROM weather)

Это именно то, что вы ищете:

SELECT country FROM country_sold
WHERE sold = (SELECT max(sold) FROM country_sold)
1 голос
/ 13 июля 2020

Никогда не используйте запятые в предложении FROM. Всегда использовать правильный, явный, стандартный , читаемый JOIN синтаксис.

Просто используйте ORDER BY и LIMIT:

WITH country_sold AS (
      SELECT l.country, sum(r.sold) as count
      FROM Label l JOIN
           released r 
           ON l.label_name = r.label_name
      GROUP BY l.country
     )
SELECT cs.*
FROM country_sold cs
ORDER BY count DESC
LIMIT 1;

Для этого вам также не нужны подзапросы или CTE:

      SELECT l.country, sum(r.sold) as count
      FROM Label l JOIN
           released r 
           ON l.label_name = r.label_name
      GROUP BY l.country
      ORDER BY count DESC
      LIMIT 1
...