Как выбрать строки с условием? sql, выберите предложение - PullRequest
1 голос
/ 24 апреля 2020

У меня есть такая таблица:

NAME      IDENTIFICATIONR   SCORE
JOHN         DB              10
JOHN         IT             NULL
KAL          DB              9
HENRY        KK              3
KAL          DB              10
HENRY        IP              9
ALI          IG              10
ALI          PA              9

И с выбранным предложением я хочу, чтобы мой результат был похож только на те имена, баллы которых равны 9 или выше. Таким образом, в основном это означает, что, например, Генри не может быть выбран, потому что у него есть оценка ниже значения 9 в одной строке, но в другой он имеет оценку 3 (нулевые значения также должны быть выброшены). Мой newtable должен выглядеть так:

NAME 
KAL 
ALI

Я использую программу sas. СПАСИБО !!

Ответы [ 5 ]

1 голос
/ 24 апреля 2020

КОЛИЧЕСТВО имен будет <> СЧЕТЧИКОМ баллов, если пропущен балл. Запрос равенства в предложении having гарантирует, что в вашем наборе результатов нет ни одного человека с пропущенным счетом.

proc sql;
  create table want as
  select distinct name from have
  group by name
  having count(name) = count(score) and min(score) >= 9;
0 голосов
/ 24 апреля 2020

Вы, похоже, рассматриваете NULL баллы как значение, меньшее 9. Вы также можете просто использовать coalesce() с min():

  select name
  from have
  group by name
  having min(coalesce(score, 0)) >= 9;

Обратите внимание, что select distinct почти никогда не используется с group by - и SAS proc sql, вероятно, плохо его оптимизирует.

0 голосов
/ 24 апреля 2020

Вы можете выполнить агрегацию:

select name
from table t
group by name
having sum(case when (score < 9  or score is null) then 1 else 0 end) = 0;

Если вам нужны полные строки, вы можете использовать not exists:

select t.*
from table t
where not exists (select 1 
                  from table t1 
                  where t1.name = t.name and (t1.score < 9 or t1.score is null)
                 );
0 голосов
/ 24 апреля 2020

вот решение

select name 
from table name where score >= 9 
and score <> NULL;
0 голосов
/ 24 апреля 2020
Select NAME from YOUR_TABLE_NAME name where SCORE > 9 and score is not null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...