powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Количество групп
15 сообщений из 15, страница 1 из 1
Количество групп
    #39844688
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Firebird 3

Правильный ли мой запрос? Или есть более оптимальные варианты?

Код: sql
1.
SELECT COUNT(*) FROM (SELECT LANGUAGE_CODE FROM TABLE_LANG GROUP BY 1)



Спасибо.
...
Рейтинг: 0 / 0
Количество групп
    #39844705
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Код: sql
1.
select count( distinct LANGUAGE_CODE ) from TABLE_LANG
...
Рейтинг: 0 / 0
Количество групп
    #39844765
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov
Код: sql
1.
select count( distinct LANGUAGE_CODE ) from TABLE_LANG



Бездуховность...
...
Рейтинг: 0 / 0
Количество групп
    #39844820
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишка,

Отыменна. Нет так чтобы налить, поговорить, рассусолить..
...
Рейтинг: 0 / 0
Количество групп
    #39845271
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

Это не эквивалентные запросы, и результат может отличаться, если в LANGUAGE_CODE нет ограничения на NULL.

Прежде чем брать свой или предложенный, подумай, какой именно результат из двух следует получить.
...
Рейтинг: 0 / 0
Количество групп
    #39845275
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryЭто не эквивалентные запросы

Э-э-э...
Отличаются ли результаты следующих запросов (с nullable LANGUAGE_CODE или без - не важно)?
Код: sql
1.
2.
3.
select LANGUAGE_CODE from TABLE_LANG group by 1
-------
select distinct LANGUAGE_CODE from TABLE_LANG



Отличаются ли результаты следующих запросов?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select count(*)
  from ( select CODE
           from T
          group by 1 )
-------
select count(*)
  from ( select distinct CODE
           from T )



И, наконец, отличаются ли результаты следующих запросов?
Код: sql
1.
2.
3.
select count(*) from ( select LANGUAGE_CODE from TABLE_LANG group by 1)
-------
select count( distinct LANGUAGE_CODE ) from TABLE_LANG



P.S. distinct учитывает nullable, так же, как и group by.
...
Рейтинг: 0 / 0
Количество групп
    #39845277
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,
Извиняюсь, вторая группа запросов: вместо from T следует читать from LANGUAGE_CODE
...
Рейтинг: 0 / 0
Количество групп
    #39845278
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

ты не в теме
count(*) и count(field) могут дать разные результаты именно из-за NULL.
distinct тут по фигу
...
Рейтинг: 0 / 0
Количество групп
    #39845281
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Дык, count(*) считается from ( select LANGUAGE_CODE from TABLE_LANG group by 1 )
В данном случае нет разницы, count(*) или count(field)
...
Рейтинг: 0 / 0
Количество групп
    #39845287
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov
И, наконец, отличаются ли результаты следующих запросов?
Код: sql
1.
2.
3.
select count(*) from ( select LANGUAGE_CODE from TABLE_LANG group by 1)
-------
select count( distinct LANGUAGE_CODE ) from TABLE_LANG



P.S. distinct учитывает nullable, так же, как и group by.

Дык есть ли разница в результате этих двух запросов?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with TABLE_LANG(id, LANGUAGE_CODE) as (
  select 1, 1 from rdb$database union all
  select 2, 2 from rdb$database union all
  select 3, 2 from rdb$database union all
  select 4, null from rdb$database
)
select count(*) from ( select LANGUAGE_CODE from TABLE_LANG group by 1)
-- выдаст 3


with TABLE_LANG(id, LANGUAGE_CODE) as (
  select 1, 1 from rdb$database union all
  select 2, 2 from rdb$database union all
  select 3, 2 from rdb$database union all
  select 4, null from rdb$database
)
select count( distinct LANGUAGE_CODE ) from TABLE_LANG
-- выдаст 2
...
Рейтинг: 0 / 0
Количество групп
    #39845288
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,

1. нет
2. нет
3. да

Кстати 1 тоже может отличаться в общем случае. Пока Firebird всегда выполняет group by сортировкой или навигацией по индексу, но в принципе группировка могла бы выполняться и через HASH GROUP (в Firebird пока не реализовано) и тогда порядок вывода записей будет разный
...
Рейтинг: 0 / 0
Количество групп
    #39845289
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryЭто не эквивалентные запросы, и результат может отличаться, если в LANGUAGE_CODE нет ограничения на NULL.

есть
...
Рейтинг: 0 / 0
Количество групп
    #39845290
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryX11,

Это не эквивалентные запросы, и результат может отличаться, если в LANGUAGE_CODE нет ограничения на NULL.

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

не важно, есть или нету ограничение на NULL.
Допустим есть записи

ru
ru
uk
ru
null

в результате нужно получить 2, т.к. ru и uk.
...
Рейтинг: 0 / 0
Количество групп
    #39845302
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис3. да
Действительно. Был не прав.
...
Рейтинг: 0 / 0
Количество групп
    #39845332
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11не важно, есть или нету ограничение на NULL.
в результате нужно получить 2, т.к. ru и uk.Важно. Если NULL запрещён, то все запросы дают идентичный результат.
Если нет, то правильный предложенный Polesov здесь 21940811 , но не твой первоначальный (он посчитает NULL как отдельное значение)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Количество групп
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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