Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Количество групп / 15 сообщений из 15, страница 1 из 1
02.08.2019, 15:39
    #39844688
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество групп
Firebird 3

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

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



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

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



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

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

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

Прежде чем брать свой или предложенный, подумай, какой именно результат из двух следует получить.
...
Рейтинг: 0 / 0
05.08.2019, 09:19
    #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
05.08.2019, 09:22
    #39845277
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество групп
Polesov,
Извиняюсь, вторая группа запросов: вместо from T следует читать from LANGUAGE_CODE
...
Рейтинг: 0 / 0
05.08.2019, 09:23
    #39845278
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество групп
Polesov,

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

Дык, count(*) считается from ( select LANGUAGE_CODE from TABLE_LANG group by 1 )
В данном случае нет разницы, count(*) или count(field)
...
Рейтинг: 0 / 0
05.08.2019, 09:36
    #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
05.08.2019, 09:44
    #39845288
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество групп
Polesov,

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

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

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

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

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

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

ru
ru
uk
ru
null

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


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