Oracle SQL: как написать ниже SQL в Oracle - PullRequest
0 голосов
/ 18 декабря 2018

Существует таблица t1:

id type 
1    a
1    b
2    c
2    a
3    a
3    a
4    a

Теперь мне нужно проверить, имеет ли идентификатор только тип a, и число ли 1 (одиночное), т. Е. Только идентификатор 4 удовлетворяет этому условию вданные выше

SELECT type, COUNT (1)
FROM t1
where id = :id
GROUP BY type
HAVING COUNT (1) = 1;

Я использую приведенный выше запрос SQL, чтобы получить данные, а затем использовать их в коде.Это не хорошее решение, может кто-нибудь помочь мне получить правильный результат с одним запросом SQL?

Ответы [ 4 ]

0 голосов
/ 18 декабря 2018

Я бы просто сделал:

SELECT id
FROM t1
GROUP BY id
HAVING COUNT(*) = 1 AND MIN(type) = 'a';
0 голосов
/ 18 декабря 2018

Вам нужно id в group by предложении и просто отфильтровать type s с предложением having:

SELECT id
FROM t1
GROUP BY id
HAVING MIN(type) = MAX(type) AND MIN(type) = 'a';
0 голосов
/ 18 декабря 2018

Я бы сгруппировал по идентификатору и отфильтровал бы по двум подсчетам:

  1. Общее количество равно 1
  2. Количество строк, которые не являются типом (используя инструкцию case)0

SELECT   id
FROM     t1
GROUP BY id
HAVING   COUNT(*) = 1 AND COUNT(CASE WHEN type <> 'a' THEN 1 END) = 0
0 голосов
/ 18 декабря 2018

Требуется простой агрегированный запрос с предложением HAVING BY, который гарантирует, что существует только одна строка и ее тип равен 'a'.

SELECT id
FROM t1
GROUP BY id
HAVING COUNT(*) = 1 and SUM(DECODE(type, 'a', 0, 1)) = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...