es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo devolver un valor booleano en Redshift

Tengo una tabla siguiente:

id  person  type counted  expected
1      a     A     0        1
2      a     A     1        0
3      a     B     1        0
4      a     B     2        0
5      a     B     3        4
6      b     C     0        0

Primero, me gustaría agrupar por type y agregar mediante la suma de counted y expected.

person type sum(counted)  sum(expected)
a      A      1            1
a      B      6            4
b      C      0            0

Luego me gustaría agregar un booleano que indique si sum(counted) es igual a sum(expected) o no.

person type sum(counted)  sum(expected)  counted=expected
a      A      1            1              true
a      B      6            4              false
b      C      0            0              true

Y luego me gustaría agrupar por person y devolver un booleano con and en person.

person  has_false
a        false
b        true

¿Hay alguna manera de lograr esto?

Ya llegué hasta la mitad pero no he procedido aún.

select person,type,sum(counted),sum(expected)
from table
group by person,type

Si alguien tiene alguna opinión, por favor hágamelo saber.

Gracias

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, se puede lograr el resultado deseado utilizando una subconsulta y una declaración CASE de esta manera:

    SELECT
      persona,
      CASE WHEN bool_and(contado = esperado) = true THEN 'false' ELSE 'true' END AS tiene_falso
    FROM (
      SELECT
        persona,
        sum(contado) AS sum_contado,
        sum(esperado) AS sum_esperado
      FROM tabla
      GROUP BY persona, tipo
    ) subconsulta
    GROUP BY persona;
    

    Aquí, primero agrupamos los datos por persona y tipo, agregando contado y esperado utilizando la función SUM. Luego, utilizamos esto como una subconsulta y agrupamos los resultados por persona. Finalmente, utilizamos la función bool_and para verificar si los valores contado y esperado son iguales para cada persona, y devolver un valor booleano en consecuencia utilizando una declaración CASE.

Comments are closed.