Эффективный способ в PRESTO для вывода результатов с логическими значениями - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь создать вывод логических значений на основе некоторых условий.

OutPut: enter image description here

EX: I have 3 rules/conditions from different tables which are not related to each other.

Rule 1:

Select USER_NAME, ID from session_user where age > 25

Правило 2:

Select USER_NAME, ID from current_user where plan = 'gold'

Правило 3:

Select USER_NAME, ID from customer where group_name='managers'

My OutPut Должен быть:

USER_NAME   |  ID | Rule 1 | Rule 2 | Rule 3

user1          1     true    false    true

user2          2     false   true     true

user3          3     true    true     true

Если user1 передает правило 1, значение должно быть true для него на выходе, если он прошел rule 2, то true иначе false.

Решение:

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';

Вопрос:

  1. Является ли указанное выше выражение select эффективным способом в PRESTO?
  2. Если нет, то каковы другие варианты?
  3. Я новичок в PRESTO, поэтому его сложно использовать при выборе. Как мне сформировать аналогичный вывод, когда я присоединяюсь к нескольким таблицам? любые ссылки do c будут полезны для дальнейшего понимания.
  4. С CASE я не могу использовать COUNT, как я могу добавить правило, если я хочу, чтобы COUNT больше 2. (Count (*)> 0) = True else False.
  5. Можем ли мы использовать SubQuery в CASE? Повлияет ли это на производительность?

1 Ответ

2 голосов
/ 13 июля 2020

PrestoDB поддерживает логические значения, поэтому выражение CASE не требуется:

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';

Я не понимаю, какое отношение остальные вопросы имеют к вашему запросу. Однако вопросы StackOverflow ограничены одним вопросом. Так что смело задавайте другой вопрос. . . но PrestoDB (как и все базы данных) поддерживает подзапросы в выражениях CASE.

...