2013-03-06 4 views
0

У меня есть это:SQL - вложенные агрегаты

SELECT BRAND_ID, CAST (ROUND (AVG(PROD_PRICE), 2) AS NUMERIC (9, 2)) AS 'LARGEST AVERAGE' 
    FROM LGPRODUCT 
    GROUP BY BRAND_ID 

и отображает кучу средних цен, за бренд, так же, как это предполагается.

Но что, если я хочу отображать наибольшее число? Или самый низкий?

Я пытался использовать MAX различными способами и пытался использовать WHERE и HAVING.

Что мне не хватает?

+0

Что [РСУБД] (http://en.wikipedia.org/wiki/Relational_database_management_system) ты используешь? 'RDBMS' означает * Реляционная система управления базами данных *. 'RDBMS является основой для SQL' и для всех современных систем баз данных, таких как MS SQL Server, IBM DB2, Oracle, MySQL и т. Д. –

ответ

1

Поскольку вы упомянули RDBMS, запрос ниже будет работать на большинстве rdbms.

SELECT BRAND_ID, 
     CAST (ROUND (AVG(PROD_PRICE), 2) AS NUMERIC (9, 2)) AS 'LARGEST AVERAGE' 
FROM LGPRODUCT 
GROUP BY BRAND_ID 
HAVING CAST (ROUND (AVG(PROD_PRICE), 2) AS NUMERIC (9, 2)) = 
     (
      SELECT MAX(xx) 
      FROM 
      (
       SELECT CAST (ROUND (AVG(PROD_PRICE), 2) AS NUMERIC (9, 2)) as xx 
       FROM LGPRODUCT 
       GROUP BY BRAND_ID 
      ) s 
     ) 

одно преимущество над запросом, он обрабатывает дублирует (BRAND_ID s, имеющие самый большой средний)

+0

Это сделало это, спасибо. Я знал, что это будет что-то простое. – madtroll

+0

Возможно, это может быть проще, если вы можете указать мне сервер базы данных, на котором вы используете ': D' –

Смежные вопросы