SQL Количество вхождений нескольких столбцов - PullRequest
0 голосов
/ 19 октября 2019

Я хочу посчитать вхождения числа 3 из нескольких столбцов с группировкой по первичному ключу. У меня есть такая таблица.

enter image description here

И я пытался с этим.

enter image description here

Но мой вывод

enter image description here

Но ожидаемый результат примерно такой:

enter image description here

Ответы [ 4 ]

2 голосов
/ 19 октября 2019

При этом:

select id,
  (s1 = 3) + (s2 = 3) + (s3 = 3) + (s4 = 3) + (s5 = 3) valcount
from tablename

Каждое из логических выражений:

s? = 3

оценивается как 0 или 1.

1 голос
/ 19 октября 2019

Ваш запрос учитывает только строки с несколькими тройками один раз.

Вы можете использовать объединение:

select  id
,       sum(case when val = 3 then 1 else 0 end)
from    (
        select id, s1 as val from t1
        union all select id, s2 from t1
        union all select id, s3 from t1
        union all select id, s4 from t1
        union all select id, s5 from t1
        ) sub
group by
        id

Пример на db-fiddle.com

0 голосов
/ 19 октября 2019

Попробуйте ниже Query ..

select id,(count(s1)+count(s2)+count(s3)+count(s4)+count(s5))valcount from(
select id, case when s1=3  then 1 end as s1, 
case when s2=3  then 1 end as s2,
case when s3=3  then 1 end as s3,
case when s4=3  then 1 end as s4,
case when s5=3  then 1 end as s5 
from test) group by id

и попробуйте другой способ

select id,
count(decode(s1,3,1))+
count(decode(s2,3,1))+
count(decode(s3,3,1))+
count(decode(s4,3,1))+
count(decode(s5,3,1))valcount
from test
group by id
0 голосов
/ 19 октября 2019
SELECT id,  ( SUM(CASE WHEN s1 =3 THEN  1 ELSE  0 END ) +    SUM(CASE WHEN s2 =3 THEN  1 ELSE  0 END ) +
    SUM(CASE WHEN s3 =3 THEN  1 ELSE  0 END ) +
    SUM(CASE WHEN s4 =3 THEN  1 ELSE  0 END ) +
    SUM(CASE WHEN s5 =3 THEN  1 ELSE  0 END )     ) AS val FROM t1 GROUP BY id

Я думаю, это будет полезно для вас

...