2014-11-18 2 views
1

У меня есть таблица гостиничного типа,Что лучше, используя несколько столбцов в GROUP BY или GROUP BY с AGGREGATE?

hotelId | hotelName | city 
============================= 
h1  | name1 | city1 
h1  | name1 | city2 
h2  | name2 | city3 
h2  | name2 | city4 
h3  | name3 | city5 
h4  | name3 | city6 

Если я хочу, чтобы запросить уникальный hotelId and name (HotelId and HotelName will always be same), что лучше запрос?

Использование нескольких Group By

Select hotelId, hotelName from Hotel 
Group By HotelId, HotName 

Использование Group By с заполнителем

Select HotelId, Max(hotelName) from Hotel 
Group By HotelId 
+0

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

+0

В обоих случаях отобразится HotelName – kriznaraj

+2

Почему бы вам не использовать SELECT DISTINCT HotelId, HotelName FROM Hotel? – kiks73

ответ

2

Как насчет этого?

select distinct hotelId, hotelname from hotel 
0

Я чувствую, что OP задает вопрос с точки зрения производительности: `t это OP? если это так:

Как не нужно указывать здесь, оба вышеуказанных запроса (ОП) служат для разных целей, но в некоторых случаях, например, в вашем случае мы можем использовать функцию агрегата, как вы здесь используете MAX(). чтобы служить цели. если вы посмотрите на план выполнения, вы можете увидеть агрегат хэша с небольшой стоимостью. поэтому ваш второй запрос лучше. производительность будет видна с огромными данными, попробуйте сами с примером.

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