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.

Transponer filas a columnas en ClickHouse

Tengo esta tabla

SQL para crear tabla

CREATE TABLE myTable
(
    `fecha` Date,
    `type` String,
    `Field1` String,
    `Field2` UInt32
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(fecha)
ORDER BY fecha
SETTINGS index_granularity = 8192

insert into myTable VALUES 
('2021-10-10','A','aa',10),
('2021-10-10','A','aa',10),
('2021-10-10','B','bb',11),
('2021-10-10','B','aa',1),
('2021-10-10','C','c',33),
('2021-10-11','A','aa',100),
('2021-10-11','A','zzz',100),
('2021-10-11','B','bb',111),
('2021-10-11','C','cc',122)
fecha type Field1 Field2
2021-10-10 A aa 10
2021-10-10 A aa 10
2021-10-10 B bb 11
2021-10-10 B aa 1
2021-10-10 C c 33
2021-10-11 A aa 100
2021-10-11 A zzz 100
2021-10-11 B bb 111
2021-10-11 C cc 122

No conozco los nombres ni la cantidad de columnas y el resultado deseado es

fecha TypeAuniqvaluesField1 TypeAsumField2 TypeBuniqvaluesField1 TypeBsumField2 TypeCuniqvaluesField1 TypeCsum_Field2
2021-10-10 1 20 2 12 1 33
2021-10-11 2 200 1 111 1 122

¡Gracias!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado, podemos utilizar consultas SQL para contar valores únicos y sumar los valores basados en las columnas ‘type’ y ‘Field’.

    Aquí está la consulta SQL que se puede utilizar:

    SELECT
        fecha AS date,
        countDistinctIf(type = 'A', Field1) AS Type_A_uniq_values_Field1,
        sumIf(type = 'A', Field2) AS Type_A_sum_Field2,
        countDistinctIf(type = 'B', Field1) AS Type_B_uniq_values_Field1,
        sumIf(type = 'B', Field2) AS Type_B_sum_Field2,
        countDistinctIf(type = 'C', Field1) AS Type_C_uniq_values_Field1,
        sumIf(type = 'C', Field2) AS Type_C_sum_Field2
    FROM myTable
    GROUP BY fecha
    ORDER BY fecha
    

    Esta consulta selecciona las columnas necesarias y utiliza las funciones incorporadas countDistinctIf() y sumIf() de ClickHouse para contar valores únicos y sumar los valores según la condición proporcionada. La instrucción GROUP BY fecha agrupa los registros por fecha, y ORDER BY fecha ordena los registros por fecha.

    Después de ejecutar esta consulta, obtendremos el resultado deseado en el siguiente formato:

    date Type_A_uniq_values_Field1 Type_A_sum_Field2 Type_B_uniq_values_Field1 Type_B_sum_Field2 Type_C_uniq_values_Field1 Type_C_sum_Field2
    2021-10-10 1 20 2 12 1 33
    2021-10-11 2 200 1 111 1 122

Comments are closed.