2015-07-12 7 views
0

Есть запрос:Сгруппированные и не сгруппированные столбцы?

SELECT brand, 
     ROUND(AVG(rating), 0) AS ar, 
     model 
FROM engines 
WHERE rating IS NOT NULL 
AND rating != '' 
AND category='Road' 
GROUP BY brand 
ORDER BY atr DESC 

Проблема столбец модели.

Как сделать результаты, чтобы показать модель с наивысшим рейтингом? (в настоящее время он показывает только первую модель, которая соответствует фильтрам).

т.е. если данные:

brand1, model1, 3 
brand1, model2, 5 
brand1, model3, 4 

Как сделать результаты быть как:

brand1, 4, model2 

(поскольку model2 имеет самый высокий рейтинг, 5)

Спасибо!

+2

Который ' RDBMS' вы используете. –

+0

Я использую MySQL – Louisa

ответ

1

В sql server вы можете это сделать.

SELECT brand, 
     Round(Avg(rating), 0) AS ar, 
     Model = (SELECT TOP 1 E.model 
       FROM engines E 
       ORDER BY rating DESC) 
FROM engines 
WHERE rating IS NOT NULL 
     AND rating != '' 
     AND category = 'Road' 
GROUP BY brand 
ORDER BY atr DESC 

В mysql изменения суб-запроса к

SELECT E.model 
FROM engines E 
ORDER BY rating DESC LIMIT 1 
+0

Использование MySQL, но запрос просто возвращает 0s и 1s для столбца модели (я использовал ваш подзапрос MySQL в основном запросе, как описано) – Louisa

+0

@Louisa - какое значение хранится в столбце 'Model'. В каком столбце содержатся значения model1, model2, ... ' –

+0

Имена моделей, например« Модель A »,« Модель B »и т. Д. – Louisa

1

стандарт SQL будет:

select e.* 
from (select e.*, row_number() over (partition by brand order by rating desc) as seqnum 
     from engines e 
    ) e 
where seqnum = 1; 

Альтернативой без оконных функций:

select e.* 
from engines e join 
    (select brand, max(rating) as maxr 
     from engines 
     group by brand 
    ) ee 
    on e.brand = ee.brand and e.rating = ee.rating; 
Смежные вопросы