Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выбрать группы строк с отсутствием значения. / 10 сообщений из 10, страница 1 из 1
13.08.2015, 23:08
    #39029080
VladRost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать группы строк с отсутствием значения.
Добрый день.

Вот пример простой таблицы
f b
Иванов а
Иванов б
Иванов г
Петров б
Петров д
Сидоров а
Сидоров д

Фамилии в примере уникальны, т.е. на каждого человека есть несколько строк. Выбрать тех у кого есть строка с буквой б во втором столбце - это простой селект.
SELECT f FROM table WHERE b='б'
А можно ли простым запросом выбрать тех у кого нет какого либо значения, скажем в том же столбце буквы г? Т.е. в данном примере, Иванов в этот список не попадает.
...
Рейтинг: 0 / 0
14.08.2015, 08:15
    #39029161
ChA
ChA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать группы строк с отсутствием значения.
VladRostДобрый день.

Вот пример простой таблицы
f b
Иванов а
Иванов б
Иванов г
Петров б
Петров д
Сидоров а
Сидоров д

Фамилии в примере уникальны, т.е. на каждого человека есть несколько строк. Выбрать тех у кого есть строка с буквой б во втором столбце - это простой селект.
SELECT f FROM table WHERE b='б'
А можно ли простым запросом выбрать тех у кого нет какого либо значения, скажем в том же столбце буквы г? Т.е. в данном примере, Иванов в этот список не попадает.Значит из всех, кто есть, надо вычесть тех, у кого есть буква "г". Детали на ваше усмотрение.
...
Рейтинг: 0 / 0
14.08.2015, 13:23
    #39029414
VladRost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать группы строк с отсутствием значения.
То есть делать две выборки и сливать вместе?

Я пока решил так - делаю группировку по фамилии, вторую колонку string_agg в одну строку и NOT LIKE, но на мой взгляд слишком сложно получается.
одним select-ом не получится?
...
Рейтинг: 0 / 0
14.08.2015, 13:39
    #39029432
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать группы строк с отсутствием значения.
VladRost,

select f
from t
group by f
having count(1) filter (where b='г') = 0
...
Рейтинг: 0 / 0
14.08.2015, 13:45
    #39029439
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать группы строк с отсутствием значения.
VladRost,

Код: sql
1.
WHERE NOT {condition}
...
Рейтинг: 0 / 0
16.08.2015, 09:35
    #39030193
VladRost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать группы строк с отсутствием значения.
p2.,

Спасибо, работает.
...
Рейтинг: 0 / 0
16.08.2015, 09:36
    #39030194
VladRost
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать группы строк с отсутствием значения.
qwwq,

Не совсем то. Строки с отсутствием нужного значения есть почти у всех. Т.е. в итоговый список попадают и те кто не должен.
...
Рейтинг: 0 / 0
16.08.2015, 14:00
    #39030263
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать группы строк с отсутствием значения.
VladRost,

Почитайте про [NOT] EXISTS - подзапросы
...
Рейтинг: 0 / 0
16.08.2015, 15:41
    #39030298
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать группы строк с отсутствием значения.
Щукина АннаVladRost,

Почитайте про [NOT] EXISTS - подзапросы
+1

разница будет видна на объёмах, при наличии нужных индексов. Правда скорее всего понадобится дополнительный handjob известного вида [ т.к. планер постгреса не умеет быстрый distinct по сильно вырожденному индексированному значению. но это детали]
...
Рейтинг: 0 / 0
18.08.2015, 16:28
    #39031766
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбрать группы строк с отсутствием значения.
7.4. Combining Queries

Код: sql
1.
2.
3.
SELECT DISTINCT f FROM t
EXCEPT
SELECT f FROM t WHERE b = 'г'
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Выбрать группы строк с отсутствием значения. / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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