Home > Net >  How to understand conditional expressions in the SELECT statement
How to understand conditional expressions in the SELECT statement

Time:08-24

I encountered a query as so:

SELECT
   (period_of >= '2022-05-01')   (period_of >= '2022-06-01')   (period_of >= '2022-07-01')   (period_of >= '2022-08-01') -1 as 'bucket',
    MAX(period_of) as max_dt, MIN(period_of) as min_dt
FROM table_a
WHERE project_id = 123
GROUP BY bucket

I don't understand this part of the SELECT statement: (period_of >= '2022-05-01') (period_of >= '2022-06-01') (period_of >= '2022-07-01') (period_of >= '2022-08-01') -1 as 'bucket'

Where can I find ref to this syntax style for the SELECT component?

How can I understand this kind of query?

CodePudding user response:

The value of a conditional expression is 1 if the condition is true, 0 if the condition is true. So

(period_of >= '2022-05-01')

will be either 1 or 0 depending on how period_of compares to that date.

For instance, if period_of = 2022-07-15, it will add 1 for 2022-05-01, 2022-06-01 and 2022-0701, and 0 for 2022-08-01, so bucket will be 3. But if period_05 = 2022-05-20 it will only add 1 for 2022-05-01, and 0 for the rest, so bucket will be 1. If period_of is before 2022-05-01 bucket will be 0.

So that expression is adding up how many of the 4 dates the period_of date is greater than or equal to. Then this total is used for grouping all the results.

This is equivalent to GROUP BY YEAR(period_of), MONTH(period_of), except that everything before May 2022 is grouped together in bucket 0 instead of separate buckets for each month.

  • Related