/ / Виклики функції сукупності функцій Vertica можуть бути не вкладені - sql, vertica

Виклики функцій з сукупною версією Vertica не можуть бути вкладені - sql, vertica

Нижче наведено мій запит, коли я його запускаю, я отримую помилку

сукупні виклики функцій можуть не вкладатись

Будь-які ідеї чому?

select
country
, client
, COUNT(DISTINCT msisdn) as "Total_number_of_MSISDN"
, count(*) as "Total_number_of_MSISDN"
, count(case when COUNT(DISTINCT msisdn) then 1 end )
from my_table
where CAST(time_updated as DATE) = CURRENT_DATE-1
and action_status="COMPLETED" and "ACTION" ="CHARGE"
GROUP BY
country
, client
ORDER BY
country
, client

My_table і очікуваний результат

Відповіді:

0 для відповіді № 1

Це нижче є найближчим, до якого я можу дійти до того, що ви очікуєте; результат для "SG" і "A", однак, у моєму випадку повертає 1, а не 2.

Тепер я просто здогадуюсь, що я хотів би це порахуватидля 2, оскільки у вашому списку вхідних даних є дві різні групи - спосіб їх сортування (не) сортування. Якщо це інформація, яку ви хочете врахувати, вам потрібно буде додати стовпчик послідовностей, а потім використовувати функції OLAP як LAG () або LEAD (), я думаю.

І очевидно, що ваша умова WHERE є повною нісенітницею з прикладу таблиці, яку ви надали.

Це найближче до мене моє дістатись лише вашими вхідними даними:

WITH
-- input
my_table(country,client,msisdn) AS (
SELECT "MY","A",111
UNION ALL SELECT "INDIA","A",112
UNION ALL SELECT "SG","A",113
UNION ALL SELECT "SG","A",113
UNION ALL SELECT "SG","A",113
UNION ALL SELECT "INDIA","A",126
UNION ALL SELECT "SG","A",113
UNION ALL SELECT "INDIA","A",116
UNION ALL SELECT "INDIA","A",120
UNION ALL SELECT "CH","D",115
UNION ALL SELECT "CH","D",115
UNION ALL SELECT "MY","B",117
UNION ALL SELECT "INDIA","B",118
UNION ALL SELECT "SG","C",119
UNION ALL SELECT "CH","D",199
UNION ALL SELECT "CH","D",199
)
,
-- rows occurring more than once
dups AS (
SELECT
country
, client
, msisdn
FROM my_table
GROUP BY
country
, client
, msisdn
HAVING COUNT(*) > 1
)
SELECT
m.country
, m.client
, COUNT(DISTINCT m.msisdn) AS "Number_of_distinct_MSISDN"
, COUNT(*) AS "Total_number_of_MSISDN"
, COUNT(DISTINCT d.msisdn) AS total_distinct_MSISDN
FROM my_table m
LEFT JOIN dups d USING(country,client,msisdn)
-- where CAST(time_updated as DATE) = CURRENT_DATE-1
-- and action_status="COMPLETED" and "ACTION" ="CHARGE"
GROUP BY
m.country
, m.client
ORDER BY
m.country
, m.client
;

country|client|Number_of_distinct_MSISDN|Total_number_of_MSISDN|total_distinct_MSN
CH     |D     |                        2|                     4|                    2
INDIA  |A     |                        4|                     4|                    0
INDIA  |B     |                        1|                     1|                    0
MY     |A     |                        1|                     1|                    0
MY     |B     |                        1|                     1|                    0
SG     |A     |                        1|                     4|                    1
SG     |C     |                        1|                     1|                    0

Удачі - Марко