Рассмотрим эту таблицу:
[Table1]
------------------------
| Person_ID | Yes | No |
|-----------|-----|----|
| 1 | 1 | 0 |
|-----------|-----|----|
| 1 | 1 | 0 |
|-----------|-----|----|
| 2 | 0 | 1 |
|-----------|-----|----|
| 2 | 0 | 1 |
|-----------|-----|----|
| 3 | 1 | 0 |
|-----------|-----|----|
| 3 | 1 | 0 |
|-----------|-----|----|
| 3 | 0 | 1 |
|-----------|-----|----|
| 3 | 1 | 0 |
------------------------
Мне нужен отдельный счет для Person_ID
, чтобы получить число людей, помеченных Yes
и No
. Однако, если у кого-то есть один экземпляр No
, он должен учитываться как No
и не включаться в счет Yes
независимо от того, сколько у него Yes
.
Мой первый Мы думали попробовать что-то похожее на:
select count(distinct (case when Yes = 1 then Person_ID else null end)) Yes_People
, count(distinct (case when No = 1 then Person_ID else null end)) No_People
from Table1
, но это приведет к подсчету 3 в счетах Yes
и No
.
Мой желаемый результат будет:
--------------------------
| Yes_People | No_People |
|------------|-----------|
| 1 | 2 |
--------------------------
Я надеюсь избежать снижения производительности от необходимости оценивать подзапрос для каждой строки, но если это будет путь к go, я приму это.