varios valores una sumar registros promedio funcion contar consultas columna campos avg agrupados agrupadas sql sum boolean

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.