2016-11-28 2 views
0

Вот данные, назовем его таблицу ТSQL-комбинирования из COUNT с где в одном запросе

A B 
-- -- 
1 14 
2 15 
3 16 
4 1 
4 3 
4 6 
4 9 
4 12 
4 15 

Я хотел бы получить значение А, который имеет только одно значение и значение B от 15 Существует два ряда, где B = 15, но есть 6 строк, где A = 4 и только одна строка, где A = 2.

Так правильный SQL должен вернуть мне 2.

Я попытался это, но он возвращает обе строки.

select A from T group by A,B having Count(A) = 1 and B = 15 

Это тоже ошибочна:

select A from T where B = 15 group by A having count(A) = 1 
+1

Следует отметить, что 'group by A, T' потерпит неудачу с синтаксической ошибкой. Я предполагаю, что вы имеете в виду 'group by A, B'. –

+0

@GordonLinoff: на самом деле в Postgres это было бы правильно. Вы можете использовать ссылку на таблицу везде, где вы можете использовать столбец - это просто означает «все столбцы строки как анонимный тип записи» - это все равно не имеет смысла, но это не приведет к ошибке. –

ответ

2

Попробуйте это:

select A 
from T 
group by A 
having Count(A) = 1 and Max(B) = 15; 

Ваша проблема кажется быть то, что вы группируете оба колона нс. Вы хотите группировать только A.

По общему признанию, ваш запрос имеет group by A, T, но я думаю, что это опечатка, основанная на описанном поведении.

1

Вы можете проверить счетчик B после группировки А.

select A 
from T 
group by A 
having Count(B) = 1 and max(B) = 15 
+0

Этот ответ и выше оба работают над этими данными, но один рассчитывает на B, а другой на A. Возможно, не имеет значения, на какой из них вы рассчитываете. – CashCow

+0

Я думаю, вы должны считать B's не A. –

+0

они оба работают, и я добавил 4, 17, чтобы проверить, работает ли максимум, и это так. – CashCow

 Смежные вопросы

  • Нет связанных вопросов^_^