2

I have this table

SQL for create table

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)
date 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

I don't know column names nor number of columns and result desired is

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

thanks!!

1 Answer 1

4
SELECT
    fecha,
    length(groupUniqArrayIf(Field1, type = 'A')) AS Type_A_1,
    sumIf( Field2, type = 'A') AS Type_A_2,
    length(groupUniqArrayIf(Field1, type = 'B')) AS Type_B_1,
    sumIf( Field2, type = 'B') AS Type_B_2,
    length(groupUniqArrayIf(Field1, type = 'C')) AS Type_C_1,
    sumIf( Field2, type = 'C') AS Type_C_2
FROM myTable
GROUP BY fecha
┌──────fecha─┬─Type_A_1─┬─Type_A_2─┬─Type_B_1─┬─Type_B_2─┬─Type_C_1─┬─Type_C_2─┐
│ 2021-10-10 │        1 │       30 │        2 │       12 │        1 │       33 │
│ 2021-10-11 │        2 │      200 │        1 │      111 │        1 │      122 │
└────────────┴──────────┴──────────┴──────────┴──────────┴──────────┴──────────┘


SELECT
    fecha,
    length(groupUniqArrayIf(Field1, type = 'A')) AS Type_A_1,
    arraySum(groupArrayIf( Field2, type = 'A')) AS Type_A_2,
    length(groupUniqArrayIf(Field1, type = 'B')) AS Type_B_1,
    arraySum(groupArrayIf( Field2, type = 'B')) AS Type_B_2,
    length(groupUniqArrayIf(Field1, type = 'C')) AS Type_C_1,
    arraySum(groupArrayIf( Field2, type = 'C')) AS Type_C_2
FROM myTable
GROUP BY fecha
┌──────fecha─┬─Type_A_1─┬─Type_A_2─┬─Type_B_1─┬─Type_B_2─┬─Type_C_1─┬─Type_C_2─┐
│ 2021-10-10 │        1 │       30 │        2 │       12 │        1 │       33 │
│ 2021-10-11 │        2 │      200 │        1 │      111 │        1 │      122 │
└────────────┴──────────┴──────────┴──────────┴──────────┴──────────┴──────────┘


SELECT
    fecha,
    length(Type_A.1) AS Type_A_1,
    arraySum(Type_A.2) AS Type_A_2,
    length(Type_B.1) AS Type_B_1,
    arraySum(Type_B.2) AS Type_B_2,
    length(Type_C.1) AS Type_C_1,
    arraySum(Type_C.2) AS Type_C_2
FROM
(
    SELECT
        fecha,
        sumMapIf([Field1], [Field2], type = 'A') AS Type_A,
        sumMapIf([Field1], [Field2], type = 'B') AS Type_B,
        sumMapIf([Field1], [Field2], type = 'C') AS Type_C
    FROM myTable
    GROUP BY fecha
)
┌──────fecha─┬─Type_A_1─┬─Type_A_2─┬─Type_B_1─┬─Type_B_2─┬─Type_C_1─┬─Type_C_2─┐
│ 2021-10-10 │        1 │       30 │        2 │       12 │        1 │       33 │
│ 2021-10-11 │        2 │      200 │        1 │      111 │        1 │      122 │
└────────────┴──────────┴──────────┴──────────┴──────────┴──────────┴──────────┘



SELECT
    fecha,
    untuple(anyIf(f, type = 'A')),
    untuple(anyIf(f, type = 'B')),
    untuple(anyIf(f, type = 'C'))
FROM
(
    SELECT
        fecha,
        type,
        (length((sumMap([Field1], [Field2]) AS x).1), arraySum(x.2)) AS f
    FROM myTable
    GROUP BY
        fecha,
        type
)
GROUP BY fecha;
┌──────fecha─┬─tupleElement(anyIf(f, equals(type, 'A')), 1)─┬─tupleElement(anyIf(f, equals(type, 'A')), 2)─┬─tupleElement(anyIf(f, equals(type, 'B')), 1)─┬─tupleElement(anyIf(f, equals(type, 'B')), 2)─┬─tupleElement(anyIf(f, equals(type, 'C')), 1)─┬─tupleElement(anyIf(f, equals(type, 'C')), 2)─┐
│ 2021-10-10 │                                            1 │                                           30 │                                            2 │                                           12 │                                            1 │                                           33 │
│ 2021-10-11 │                                            2 │                                          200 │                                            1 │                                          111 │                                            1 │                                          122 │
└────────────┴──────────────────────────────────────────────┴──────────────────────────────────────────────┴──────────────────────────────────────────────┴──────────────────────────────────────────────┴──────────────────────────────────────────────┴──────────────────────────────────────────────┘


SELECT
    fecha,
    groupArrayIf((Field1, Field2), type = 'A') AS Type_A,
    groupArrayIf((Field1, Field2), type = 'B') AS Type_B,
    groupArrayIf((Field1, Field2), type = 'C') AS Type_C
FROM myTable
GROUP BY fecha
┌──────fecha─┬─Type_A──────────────────────────┬─Type_B───────────────┬─Type_C───────┐
│ 2021-10-10 │ [('aa',10),('aa',10),('aa',10)] │ [('bb',11),('aa',1)] │ [('c',33)]   │
│ 2021-10-11 │ [('aa',100),('zzz',100)]        │ [('bb',111)]         │ [('cc',122)] │
└────────────┴─────────────────────────────────┴──────────────────────┴──────────────┘


SELECT
    fecha,
    type,
    sumMap([Field1], [Field2])
FROM myTable
GROUP BY
    fecha,
    type
┌──────fecha─┬─type─┬─sumMap(array(Field1), array(Field2))─┐
│ 2021-10-10 │ B    │ (['aa','bb'],[1,11])                 │
│ 2021-10-10 │ C    │ (['c'],[33])                         │
│ 2021-10-11 │ A    │ (['aa','zzz'],[100,100])             │
│ 2021-10-10 │ A    │ (['aa'],[30])                        │
│ 2021-10-11 │ C    │ (['cc'],[122])                       │
│ 2021-10-11 │ B    │ (['bb'],[111])                       │
└────────────┴──────┴──────────────────────────────────────┘


SELECT
    fecha,
    sumMapIf([Field1], [Field2], type = 'A') AS Type_A,
    sumMapIf([Field1], [Field2], type = 'B') AS Type_B,
    sumMapIf([Field1], [Field2], type = 'C') AS Type_C
FROM myTable
GROUP BY fecha
┌──────fecha─┬─Type_A───────────────────┬─Type_B───────────────┬─Type_C─────────┐
│ 2021-10-10 │ (['aa'],[30])            │ (['aa','bb'],[1,11]) │ (['c'],[33])   │
│ 2021-10-11 │ (['aa','zzz'],[100,100]) │ (['bb'],[111])       │ (['cc'],[122]) │
└────────────┴──────────────────────────┴──────────────────────┴────────────────┘


SELECT
    fecha,
    arrayStringConcat(Type_A.1, '/') AS Type_A_1,
    arraySum(Type_A.2) AS Type_A_2,
    arrayStringConcat(Type_B.1, '/') AS Type_B_1,
    arraySum(Type_B.2) AS Type_B_2,
    arrayStringConcat(Type_C.1, '/') AS Type_C_1,
    arraySum(Type_C.2) AS Type_C_2
FROM
(
    SELECT
        fecha,
        sumMapIf([Field1], [Field2], type = 'A') AS Type_A,
        sumMapIf([Field1], [Field2], type = 'B') AS Type_B,
        sumMapIf([Field1], [Field2], type = 'C') AS Type_C
    FROM myTable
    GROUP BY fecha
)
┌──────fecha─┬─Type_A_1─┬─Type_A_2─┬─Type_B_1─┬─Type_B_2─┬─Type_C_1─┬─Type_C_2─┐
│ 2021-10-10 │ aa       │       30 │ aa/bb    │       12 │ c        │       33 │
│ 2021-10-11 │ aa/zzz   │      200 │ bb       │      111 │ cc       │      122 │
└────────────┴──────────┴──────────┴──────────┴──────────┴──────────┴──────────┘



Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.