Эффективный способ использования Count и JOIN в операторах PRESTO CASE - PullRequest
0 голосов
/ 13 июля 2020

Это связано с вопросом, заданным ранее на Effective way in PRESTO to Result output with boolen values. Пожалуйста, обратитесь к вопросу для получения более подробной информации.

В ответ на вопрос доступны два решения.

SELECT  dp.USER_NAME,
        dp.ID, 
        CASE 
            WHEN dp.sex='F' THEN 'True' 
            ELSE 'False' 
        END AS Rule_1,
        CASE 
            WHEN dp.sex='M' THEN 'True' 
            ELSE 'False' 
        END AS Rule_2,
        CASE 
            WHEN dp.sex not in ('M','F') THEN 'True' 
            ELSE 'False' 
        END AS Rule_3
FROM    user_details dp where dp.Organisation='007';
SELECT dp.USER_NAME, dp.ID, 
       (dp.sex = 'F') AS Rule_1,
       (dp.sex = 'M') AS Rule_2,
       (dp.sex not in ('M','F')) AS Rule_3
FROM user_details dp 
WHERE dp.Organisation = '007';

Вопросы:

С CASE я не могу использовать COUNT, как я могу добавить правило, если я хочу, чтобы COUNT было больше 2. (Count (*)> 0) = True else False с JOIN Tables to the selected Query?

Есть ли способ для пользователя COUNT на всякий случай?

Что я пытаюсь создать:

SELECT dp.USER_NAME, dp. ID, 
       (dp.sex = 'F') AS Rule_1,
       (dp.sex = 'M') AS Rule_2,
       (dp.sex not in ('M','F')) AS Rule_3,
       (dp.DateOfBirth NOT BETWEEN timestamp '1986-04-01' AND timestamp '2001-03-31') AS Rule_4,
       (count(up.*)>10) AS Rule_5,
FROM user_details dp 
JOIN user_purchase up on up.user_id=dp.id
where dp.Organisation='007';

В приведенном выше запросе я пытаюсь опубликовать логическое значение, если user_purchase последние данные таблицы> 10, то конкретное выходное значение строки должно быть True иначе False.

USER_NAME   |  ID | Rule 1 | Rule 2 | Rule 3 | Rule 4 | Rule 5

user1          1     true    false    true     true     true

user2          2     false   true     true     true     true

user3          3     true    true     true     true     false
...