powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите с запросом
6 сообщений из 6, страница 1 из 1
Помогите с запросом
    #35447770
Sunsetter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я роде бы и не новичек, но долбаюсь с запросом уже несколько дней. Наверно у меня есть пробелы в SQL . Есть одна таблица с двумя полями.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
num | value
____|_____
  21 | "aa"
  21 | "bb"
  21 | "cc"
  10 | "aa"
  10 | "cc"
  30 | "aa"
  40 | "aa"
  50 | "bb"

Нужно с помощью одного запроса выдать список номеров num , для которых одновременно имеются несколько значений в поле value, указанных в условии.
Например найти список номеров для которых одновременно есть запись "aa" и "bb" - должно выдать только номер 21. Для "aa" и "cc" - должно выдать номера 21, 10.

Код: plaintext
 SELECT num FROM table WHERE value='aa' OR value='bb'  
- естественно не работает, так как выдаст все номера где есть хотя бы одно из двух значений.
...
Рейтинг: 0 / 0
Помогите с запросом
    #35447817
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
select num from groupby where val='aa' OR val='bb' group by num having count( 1 )> 1 
...
Рейтинг: 0 / 0
Помогите с запросом
    #35448152
Sunsetter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, у меня крутилось в голове что надо через агрегативные функции делать, но уложиться не смогло =)
...
Рейтинг: 0 / 0
Помогите с запросом
    #35450570
Sunsetter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня теперь еще одна задачка.
num | value
____|_____
21 | "aa"
21 | "bb"
21 | "cc"
10 | "aa"
10 | "cc"
30 | "aa"
40 | "aa"
50 | "bb"

Теперь надо найти список номеров для которых нету ни одной из перечисленных записей в поле value. Например для условия "aa" и "сс" - должно выдать только номер 50(у него нет ни "aa" ни "сс"). Для "bb" и "yy" - должно выдать номера 10,30,40.

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT a.num
FROM
     (
      SELECT  num,     count(num) as count_num
      FROM  
            table
      GROUP BY num
     ) as a,
    (
     SELECT  num,      count(num) as count_num
     FROM  
           table
     WHERE
           value <> 'aa' AND
           value <> 'bb' 
     GROUP BY num
     ) as b

WHERE
    a.num = b.num AND
    a.count_num  = b.count_num

(Смысл запроса в том что он сравнивает количество сгрупированых номеров до и после условия. И выдает только те, количество которых не изменилось )
...
Рейтинг: 0 / 0
Помогите с запросом
    #35450988
Бабичев Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SunsetterУ меня теперь еще одна задачка.

1)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select distinct t0.num
  from table t0
 where not exists
        (
          select null
            from table t1
           where t1.num = t0.num
             and t1.value in ('bb','yy') -- В этом месте список интересующих VALUE
        ) 

2)
Код: plaintext
1.
2.
3.
4.
5.
select distinct t0.num
  from  table t0
  left join table t1
    on t1.num = t0.num
   and t1.value in ('bb','yy') -- В этом месте список интересующих VALUE
 where t1.num is null
...
Рейтинг: 0 / 0
Помогите с запросом
    #35454895
LeXa NalBat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при условии уникальности комбинации (num,value)

> одновременно есть запись "aa" и "bb"

select num from t1 group by num having count( nullif( value='aa' or value='bb', false ) ) = 2;

> нету ни одной из перечисленных записей в поле value. Например для условия "aa" и "сс"

select num from t1 group by num having count( nullif( value='aa' or value='cc', false ) ) = 0;
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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