powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / group by vs distinct
28 сообщений из 28, показаны все 2 страниц
group by vs distinct
    #36124233
gjkmpjdfntkm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример:

select * from test

1 Moscow001 aaa
2 Moscow001 aab
3 London002 aac
4 London002 aad
5 Moscow001 aaa
6 Moscow001 aab
7 London002 aaa


select names,numbers from test
group by names,numbers

aaa London002
aaa Moscow001
aab Moscow001
aac London002
aad London002

select distinct(names),numbers from test

aaa London002
aaa Moscow001
aab Moscow001
aac London002
aad London002
...
Рейтинг: 0 / 0
group by vs distinct
    #36124237
gjkmpjdfntkm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjkmpjdfntkm,

Казалось бы 2 одинаковых результата.
ВОпрос, имеет ли возможность group by какие-то приемущества/недостатки по сравнению с distinct в запросах? (учет использования агр.функций не писать)
...
Рейтинг: 0 / 0
group by vs distinct
    #36124447
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, смотрите план выполнения запроса. Баян
С уважением, Naf
...
Рейтинг: 0 / 0
group by vs distinct
    #36124632
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjkmpjdfntkm пишет:

Тут всё просто. Если вам нужно использовать агрегирующие функции, используйте
GROUP BY. Если не нужны -- DISTINCT.

GROUP BY без агрегирующих функций по идее может и не работать.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
group by vs distinct
    #36124676
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
gjkmpjdfntkm пишет:

Тут всё просто. Если вам нужно использовать агрегирующие функции, используйте
GROUP BY. Если не нужны -- DISTINCT.

GROUP BY без агрегирующих функций по идее может и не работать.
с чего бы ему не работать то?
...
Рейтинг: 0 / 0
group by vs distinct
    #36125419
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможны СУБД-специфичные различия. Например, в MySQL GROUP BY гарантирует сортировку результата, а DISTINCT - нет.
...
Рейтинг: 0 / 0
group by vs distinct
    #36125649
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftВозможны СУБД-специфичные различия. Например, в MySQL GROUP BY гарантирует сортировку результата, а DISTINCT - нет.Возможно. Но я бы для сортировки использовал прямую инструкцию, предназначенную конкретно для этого: ORDER BY
...
Рейтинг: 0 / 0
group by vs distinct
    #36125657
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftВозможны СУБД-специфичные различия. Например, в MySQL GROUP BY гарантирует сортировку результата, а DISTINCT - нет.
Djn 'nj vf
...
Рейтинг: 0 / 0
group by vs distinct
    #36125667
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойmiksoftВозможны СУБД-специфичные различия. Например, в MySQL GROUP BY гарантирует сортировку результата, а DISTINCT - нет.
Djn 'nj vf
Пардон, но это настолько специфичные различия, что я на них бы никогда не надеялся (не использовал, то бишь...)
только ORDER BY гарантирует сортировку (если нет ошибок в СУБД :)
...
Рейтинг: 0 / 0
group by vs distinct
    #36126100
gjkmpjdfntkm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему спрашиваю, выполняется запрос:

авторselect Devicepool.name DevicePool,Device.name devicename,Device.description,DeviceNumplanMap.display,DeviceNumplanMap.label,NumPlan.dnorpattern intnumber,DeviceNumplanMap.e164mask extnumber from devicepool,device,DeviceNumplanMap,NumPlan
where device.fkdevicepool=devicepool.pkid
and
Device.pkid=DeviceNumplanMap.fkDevice
and
NumPlan.pkid=DeviceNumplanMap.fkNumPlan
and Device.name like 'SEP%'
group by Device.name,Devicepool.name,Device.description,DeviceNumplanMap.display,DeviceNumplanMap.label,NumPlan.dnorpattern,DeviceNumplanMap.e164mask
order by devicepool,intnumber

который выдает одинаковые Device.name,

результат повторяющихся данных SEP%:

Oleg SEP001646E Save_DP Ivan 5939 5939 14 14 94(13)
Ivan SEP001BD4A SaveNo_DP Ivan 5859 5859 10 10 94(17)
Ivan SEP001BD4A SaveNo_DP Ivan 5939 5939 14 14 94(13)




пробовал делать

авторselect distinct Device.name devicename,Devicepool.name DevicePool,Device.description,DeviceNumplanMap.display,DeviceNumplanMap.label,NumPlan.dnorpattern intnumber,DeviceNumplanMap.e164mask extnumber from devicepool,device,DeviceNumplanMap,NumPlan
where device.fkdevicepool=devicepool.pkid
and
Device.pkid=DeviceNumplanMap.fkDevice
and
NumPlan.pkid=DeviceNumplanMap.fkNumPlan
and Device.name like 'SEP%'
/*group by Device.name,Devicepool.name,Device.description,DeviceNumplanMap.display,DeviceNumplanMap.label,NumPlan.dnorpattern,DeviceNumplanMap.e164mask */
order by devicepool,intnumber

записи Device.name также повторяются.

Как мне сделать, чтобы записи с подобными одинаковыми полями не повторялись?
...
Рейтинг: 0 / 0
group by vs distinct
    #36126273
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjkmpjdfntkmПочему спрашиваю, выполняется запрос:Вот с этого и надо было начинать, а не морочить голову.
gjkmpjdfntkmКак мне сделать, чтобы записи с подобными одинаковыми полями не повторялись?а что должно быть в остальных полях?
...
Рейтинг: 0 / 0
group by vs distinct
    #36126297
gjkmpjdfntkm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,
Пример формата данных

<devicename>SEP001B0</devicename>
<devicepool>Save_DP</devicepool>
<description>Ivan </description>
<display>Ivan </display>
<label>94(17)</label>
<intnumber>10</intnumber>
<extnumber>5859</extnumber>

При выборке значение в <devicename> не должны повторяться
...
Рейтинг: 0 / 0
group by vs distinct
    #36126305
gjkmpjdfntkm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjkmpjdfntkm,

схема базы в самом конце

http://www.cisco.com/en/US/docs/voice_ip_comm/cucm/datadict/6_1_1/dd_611.pdf
...
Рейтинг: 0 / 0
group by vs distinct
    #36126308
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не хотите отвечать на вопросы - пожалуйста, вот вам вариант:
Код: plaintext
select distinct Device.name from ...
повторений не будет.
...
Рейтинг: 0 / 0
group by vs distinct
    #36126315
gjkmpjdfntkm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

поле с SEP% должно быть уникальным,
все остальные записи могу быть как различными так и одинаковыми между собой
...
Рейтинг: 0 / 0
group by vs distinct
    #36126318
gjkmpjdfntkm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

В примере я привел, что

авторOleg SEP001646E Save_DP Ivan 5939 5939 14 14 94(13)
Ivan SEP001BD4A SaveNo_DP Ivan 5859 5859 10 10 94(17)
Ivan SEP001BD4A SaveNo_DP Ivan 5939 5939 14 14 94(13)

что поле SEP001BD4A повторяется 2 раза
...
Рейтинг: 0 / 0
group by vs distinct
    #36126334
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjkmpjdfntkmmiksoft,

поле с SEP% должно быть уникальным,
все остальные записи могу быть как различными так и одинаковыми между собойвы записи с полями не путаете?
...
Рейтинг: 0 / 0
group by vs distinct
    #36126340
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjkmpjdfntkmmiksoft,

В примере я привел, что

авторOleg SEP001646E Save_DP Ivan 5939 5939 14 14 94(13)
Ivan SEP001BD4A SaveNo_DP Ivan 5859 5859 10 10 94(17)
Ivan SEP001BD4A SaveNo_DP Ivan 5939 5939 14 14 94(13)

что поле SEP001BD4A повторяется 2 разаНу и?
Мой вариант выведет
Код: plaintext
1.
SEP001646E
SEP001BD4A
т.е. повторений не будет.
...
Рейтинг: 0 / 0
group by vs distinct
    #36126353
gjkmpjdfntkm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

а остальные таблицы??? вы смотрите только одно поле, а я привел запрос с множеством полей в разных таблицах
...
Рейтинг: 0 / 0
group by vs distinct
    #36126470
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjkmpjdfntkmmiksoft,

а остальные таблицы??? вы смотрите только одно поле, а я привел запрос с множеством полей в разных таблицаха что должно быть в других полях - вы так и не ответили.
вы даже не привели пример желаемого результата для вашего-же примера.
...
Рейтинг: 0 / 0
group by vs distinct
    #36126596
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjkmpjdfntkmgjkmpjdfntkm,

Казалось бы 2 одинаковых результата.
ВОпрос, имеет ли возможность group by какие-то приемущества/недостатки по сравнению с distinct в запросах? (учет использования агр.функций не писать)
Наверное, имеет недостатки использования не по назначению.
Например:
1) Логический аспект: вместо того чтобы спросить выбрать только уникальные записи, спрашивается сгруппировать записи по полям, используя дополнительное знание о том, что тада они будут уникальными. Не говоря уже о том, что кто-то встретив такое может поиметь подозрение об ошибке писавшего: забыл дописать групповую ф-ю? И должен будет тратить время на проверку такового подозрения.
Т.е. логическое усложнение запроса.
2) Если полей много, то очевидно, что выражение group by для извлечения уникальных записей сложнее. А стилевые соображения предполагают придерживаться одинакового подходжа во всех случаях.
Синтаксическое усложнение запроса, дополнительные риски ухудшения стиля кода приложения.
Все это несет риски удорожания и для разработки приложения, и тем более для сопровождения.
...
Рейтинг: 0 / 0
group by vs distinct
    #36126604
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoзабыл дописать групповую ф-ю?А, может, наоборот, приготовил фундамент для вероятного, с его точки зрения, добавления этой функции.
vadiminfoЕсли полей много, то очевидно, что выражение group by для извлечения уникальных записей сложнее.Совершенно не очевидно.
...
Рейтинг: 0 / 0
group by vs distinct
    #36127020
gjkmpjdfntkm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

Желаемый результат:

авторOleg SEP001646E Save_DP Ivan 5939 5939 14 14 94(13)
Ivan SEP001BD4A SaveNo_DP Ivan 5859 5859 10 10 94(17)

но получаю
автор
Oleg SEP001646E Save_DP Ivan 5939 5939 14 14 94(13)
Ivan SEP001BD4A SaveNo_DP Ivan 5859 5859 10 10 94(17)
Ivan SEP001BD4A SaveNo_DP Ivan 5939 5939 14 14 94(13)



схема базы в аттаче
...
Рейтинг: 0 / 0
group by vs distinct
    #36127463
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gjkmpjdfntkmmiksoft,

Желаемый результат:

авторOleg SEP001646E Save_DP Ivan 5939 5939 14 14 94(13)
Ivan SEP001BD4A SaveNo_DP Ivan 5859 5859 10 10 94(17)

но получаю
автор
Oleg SEP001646E Save_DP Ivan 5939 5939 14 14 94(13)
Ivan SEP001BD4A SaveNo_DP Ivan 5859 5859 10 10 94(17)
Ivan SEP001BD4A SaveNo_DP Ivan 5939 5939 14 14 94(13)
А по какому принципу в последних полях были выбраны значения "5859 5859 10 10 94(17)" ?
Кстати, а СУБД какая?
...
Рейтинг: 0 / 0
group by vs distinct
    #36127912
gjkmpjdfntkm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,

extnumber - 5859 5859

intnumber - 10 10

label - 94(17)



db - informix
...
Рейтинг: 0 / 0
group by vs distinct
    #36128153
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftА, может, наоборот, приготовил фундамент для вероятного, с его точки зрения, добавления этой функции.
Вот я и опасаюсь что, чем больше возможных гаданий что он хотел, тем, возможно, и хуже.

miksoft
vadiminfoЕсли полей много, то очевидно, что выражение group by для извлечения уникальных записей сложнее.Совершенно не очевидно.

Как же буит выглядеть, к примеру, запрос с GROUP BY, реализующий
Код: plaintext
1.
select distinct * from GROUPB

К примеру для таблы


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create table GROUPB
(
  G   NUMBER,
  W1  NUMBER,
  W2  NUMBER,
  W3  NUMBER,
  W4  NUMBER,
  W5  NUMBER,
  W6  NUMBER,
  W7  NUMBER,
  W8  NUMBER,
  W9  NUMBER,
  W10 NUMBER,
  W11 NUMBER,
  W12 NUMBER,
  W13 NUMBER,
  W14 NUMBER
)
...
Рейтинг: 0 / 0
group by vs distinct
    #36128784
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfomiksoftvadiminfoЕсли полей много, то очевидно, что выражение group by для извлечения уникальных записей сложнее.Совершенно не очевидно.Как же буит выглядеть, к примеру, запрос с GROUP BY, реализующий
Код: plaintext
select distinct * from GROUPB
Если говорить о "выглядеть", то да, согласен. Я первоначально подумал о выполнении.

Кстати, вспомнил еще один MySQL-специфичный момент - distinct всегда действует на все поля, перечисленные в секции select, а в group by можно перечислять не все поля. Т.е. задача топикстартера вполне решается таким вариантом:
Код: plaintext
1.
select ...
group by Device.name 
...
Рейтинг: 0 / 0
group by vs distinct
    #36129072
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftЕсли говорить о "выглядеть", то да, согласен. Я первоначально подумал о выполнении.

[/src]
А я о выполнении совсем ничего и не говорил - это дело оптимизации: и, надеюсь, во многих случаях оптимизатора. Конесьно, в общем случае моно говорить о разных этапах проектирования, в частности: логическом, физическом. На логическом выполнениене не играет роли. Ну на физическом может происходить "деоптимизация" ради оптимизации выполнения: читается плохо, выполняется хорошо. Однако, счас это все реже и реже: мощные оптимизаторы, другие средства не затрагивающие синтаксис (секциорование, например).
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / group by vs distinct
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]