sql - valores - ¿Cómo puedo SUMAR las filas que tienen al menos X 1 booleanos?
sumar registros sql (4)
Tabla de ejemplo:
col1 col2 col3 col4
Abe 1 0 1
Bob 0 1 0
Cam 1 1 1
Dan 1 0 0
Eve 1 1 1
¿Cómo puedo consultar para poder SUM
cuántas personas en col1
tienen un total de 2 1? (Entonces, dado que Abe es la única persona con 2 1s, la consulta genera el número 1.)
Gracias.
Si el valor de sus columnas contiene solo 0
y 1
entonces Vlad Călin Buzea
y la respuesta scaisEdge
funcionarán para usted. Pero si puede tener otro que 0
y 1
, necesita esto.
SELECT COUNT(*)
FROM Table_Name
WHERE (CASE WHEN col2 = 1 THEN 1 ELSE 0 END) +
(CASE WHEN col3 = 1 THEN 1 ELSE 0 END) +
(CASE WHEN col4 = 1 THEN 1 ELSE 0 END) = 2
Use la adición de columnas en where cláususe y select count ()
select count(*)
from my_table
where CAST(ifnull(col2,false) AS SIGNED INTEGER) +
CAST(ifnull(col3,false) AS SIGNED INTEGER) +
CAST(ifnull(col4,false) AS SIGNED INTEGER) = 2;
Select count(*) from table_name where col2+col3+col4=2
;WITH cte AS (
SELECT ''Abe'' AS Col1, CAST(1 AS BIT) as Col2, CAST(0 AS BIT) as Col3, CAST(1 AS BIT) AS Col4
UNION ALL
SELECT ''Bob'' AS Col1, CAST(0 AS BIT) as Col2, CAST(1 AS BIT) as Col3, CAST(0 AS BIT) AS Col4
UNION ALL
SELECT ''Cam'' AS Col1, CAST(1 AS BIT) as Col2, CAST(1 AS BIT) as Col3, CAST(1 AS BIT) AS Col4
UNION ALL
SELECT ''AbeWNull'' AS Col1, CAST(1 AS BIT) as Col2, CAST(NULL AS BIT) as Col3, CAST(1 AS BIT) AS Col4
)
SELECT *
FROM
cte
WHERE
ISNULL(CAST(Col2 AS INT),0) + ISNULL(Col3,0) + ISNULL(Col4,0) = 2
El cte
le da algunos datos de prueba. 2 cosas. 1 si es una columna Boolean
o de bit
, podría tener que cast/convert
a un tipo de datos integer
o numeric
al menos una de las columnas o la adición no funcionaría. Y sí lo probé y necesité. Segundo, si no lidias con el potencial de un null
es posible que no obtengas la respuesta que deseas.
Por ejemplo.
SELECT 1 + NULL + 1
Te dará NULL
Usar SUM
en una columna no es lo mismo e ignorará los nulls
, pero no durante la línea de suma.