Bird
Raised Fist0
dbtdata~10 mins

if/else logic in models in dbt - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - if/else logic in models
Start
↓
Evaluate condition
↓
Execute IF block
↓
Execute ELSE block
↓
Continue with rest of model
The model checks a condition. If true, it runs the IF part; otherwise, it runs the ELSE part, then continues.
Execution Sample
dbt
select
  case
    when sales > 100 then 'High'
    else 'Low'
  end as sales_category
from sales_data
This SQL code classifies sales as 'High' if sales are over 100, otherwise 'Low'.
Execution Table
RowsalesCondition (sales > 100)Branch TakenOutput sales_category
1150TrueIF'High'
290FalseELSE'Low'
3100FalseELSE'Low'
4200TrueIF'High'
550FalseELSE'Low'
💡 All rows processed; condition evaluated for each row to assign category.
Variable Tracker
VariableRow 1Row 2Row 3Row 4Row 5
sales1509010020050
Condition (sales > 100)TrueFalseFalseTrueFalse
sales_category'High''Low''Low''High''Low'
Key Moments - 2 Insights
Why does sales = 100 result in 'Low' and not 'High'?
Because the condition is sales > 100, which means strictly greater than 100. At 100, the condition is False, so ELSE branch runs (see execution_table row 3).
What happens if the condition is True for a row?
The IF block runs, assigning 'High' to sales_category (see execution_table rows 1 and 4).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is sales_category for row 2?
A'High'
B'Low'
CNULL
D'Medium'
💡 Hint
Check row 2 in execution_table under 'Output sales_category'
At which row does the condition sales > 100 become False for the first time?
ARow 1
BRow 3
CRow 2
DRow 5
💡 Hint
Look at 'Condition (sales > 100)' column in execution_table
If the condition changed to sales >= 100, what would sales_category be for row 3?
A'High'
B'Low'
CNULL
D'Medium'
💡 Hint
Consider how changing > to >= affects condition for sales = 100 in variable_tracker
Concept Snapshot
if/else logic in dbt models uses SQL CASE statements.
Syntax: CASE WHEN condition THEN result ELSE other_result END.
Evaluates condition row-by-row.
Runs THEN part if True, ELSE part if False.
Useful for categorizing or branching logic in models.
Full Transcript
In dbt models, if/else logic is done using SQL CASE statements. The model checks a condition for each row. If the condition is true, it runs the THEN part; otherwise, it runs the ELSE part. For example, classifying sales as 'High' if sales are greater than 100, else 'Low'. The execution table shows each row's sales value, condition result, branch taken, and output category. Note that sales exactly 100 is not greater than 100, so it falls into the ELSE branch. This logic helps create categories or decisions inside your data models.

Practice

(1/5)
1. In dbt models, which SQL construct is commonly used to add if/else logic for creating new columns?
easy
A. WHILE LOOP
B. FOR LOOP
C. CASE WHEN ... THEN ... ELSE ... END
D. FUNCTION CALL

Solution

  1. Step 1: Understand conditional logic in SQL

    SQL uses CASE statements to check conditions and return values accordingly.
  2. Step 2: Identify the correct syntax for if/else logic

    CASE WHEN ... THEN ... ELSE ... END is the standard way to implement if/else logic in SQL and dbt models.
  3. Final Answer:

    CASE WHEN ... THEN ... ELSE ... END -> Option C
  4. Quick Check:

    CASE statement = if/else logic [OK]
Hint: Remember: CASE is SQL's if/else [OK]
Common Mistakes:
  • Confusing loops with conditional logic
  • Using function calls instead of CASE
  • Trying to use procedural code in SQL
2. Which of the following is the correct syntax for a CASE statement in a dbt model to check if a column score is greater than 50?
easy
A. CASE WHEN score THEN 'Pass' ELSE 'Fail' END
B. CASE score > 50 THEN 'Pass' ELSE 'Fail'
C. IF score > 50 THEN 'Pass' ELSE 'Fail' END
D. CASE WHEN score > 50 THEN 'Pass' ELSE 'Fail' END

Solution

  1. Step 1: Review correct CASE syntax

    The correct syntax starts with CASE WHEN condition THEN result ELSE other_result END.
  2. Step 2: Check each option for syntax errors

    CASE WHEN score > 50 THEN 'Pass' ELSE 'Fail' END correctly uses CASE WHEN score > 50 THEN 'Pass' ELSE 'Fail' END. Others miss WHEN, END, or have wrong structure.
  3. Final Answer:

    CASE WHEN score > 50 THEN 'Pass' ELSE 'Fail' END -> Option D
  4. Quick Check:

    CASE WHEN + condition + THEN + result + ELSE + result + END [OK]
Hint: CASE must have WHEN and END keywords [OK]
Common Mistakes:
  • Omitting WHEN keyword
  • Missing END at the end
  • Using IF instead of CASE in SQL
3. Given the following dbt model SQL snippet, what will be the value of status for a row where score = 75?
SELECT
  score,
  CASE
    WHEN score >= 90 THEN 'Excellent'
    WHEN score >= 70 THEN 'Good'
    ELSE 'Average'
  END AS status
FROM scores_table
medium
A. 'Good'
B. NULL
C. 'Average'
D. 'Excellent'

Solution

  1. Step 1: Check conditions in order for score = 75

    First condition: score >= 90? No (75 < 90). Second condition: score >= 70? Yes (75 >= 70).
  2. Step 2: Determine which condition applies first

    The first true condition is WHEN score >= 70 THEN 'Good', so status = 'Good'.
  3. Final Answer:

    'Good' -> Option A
  4. Quick Check:

    75 >= 70 = 'Good' [OK]
Hint: Check CASE conditions top to bottom [OK]
Common Mistakes:
  • Ignoring order of CASE conditions
  • Choosing 'Excellent' incorrectly
  • Assuming ELSE applies before WHEN
4. Identify the error in this dbt model snippet:
SELECT
  user_id,
  CASE
    WHEN age > 18 THEN 'Adult'
    WHEN age <= 18 THEN 'Minor'
    ELSE 'Unknown'
FROM users
medium
A. Missing END keyword for CASE statement
B. Incorrect comparison operator in WHEN clauses
C. ELSE clause cannot be used in CASE
D. Missing comma after user_id

Solution

  1. Step 1: Check CASE statement syntax

    CASE statements must end with END keyword to close the block.
  2. Step 2: Verify presence of END keyword

    The snippet lacks END after ELSE 'Unknown', causing syntax error.
  3. Final Answer:

    Missing END keyword for CASE statement -> Option A
  4. Quick Check:

    CASE must end with END [OK]
Hint: Always close CASE with END [OK]
Common Mistakes:
  • Forgetting END keyword
  • Misplacing ELSE clause
  • Assuming ELSE is optional
5. You want to create a new column category in your dbt model based on sales amount: if sales > 1000, category is 'High'; if sales between 500 and 1000 inclusive, category is 'Medium'; otherwise, 'Low'. Which CASE statement correctly implements this logic?
hard
A. CASE WHEN sales > 1000 THEN 'High' WHEN sales > 500 THEN 'Medium' ELSE 'Low' END
B. CASE WHEN sales > 1000 THEN 'High' WHEN sales >= 500 AND sales <= 1000 THEN 'Medium' ELSE 'Low' END
C. CASE WHEN sales > 500 AND sales <= 1000 THEN 'Medium' WHEN sales > 1000 THEN 'High' ELSE 'Low' END
D. CASE WHEN sales > 1000 THEN 'High' ELSE WHEN sales >= 500 THEN 'Medium' ELSE 'Low' END

Solution

  1. Step 1: Analyze the conditions and their order

    Check sales > 1000 first for 'High', then sales between 500 and 1000 inclusive for 'Medium', else 'Low'.
  2. Step 2: Verify correct syntax and condition order

    CASE WHEN sales > 1000 THEN 'High' WHEN sales >= 500 AND sales <= 1000 THEN 'Medium' ELSE 'Low' END correctly orders conditions (highest first) and uses proper inclusive range with AND. CASE WHEN sales > 500 AND sales <= 1000 THEN 'Medium' WHEN sales > 1000 THEN 'High' ELSE 'Low' END misses inclusive lower bound (sales=500 fails) and suboptimal order. CASE WHEN sales > 1000 THEN 'High' WHEN sales > 500 THEN 'Medium' ELSE 'Low' END misses inclusive lower bound. CASE WHEN sales > 1000 THEN 'High' ELSE WHEN sales >= 500 THEN 'Medium' ELSE 'Low' END has syntax error with ELSE WHEN.
  3. Final Answer:

    CASE WHEN sales > 1000 THEN 'High' WHEN sales >= 500 AND sales <= 1000 THEN 'Medium' ELSE 'Low' END -> Option B
  4. Quick Check:

    Order and range checks correct in CASE WHEN sales > 1000 THEN 'High' WHEN sales >= 500 AND sales <= 1000 THEN 'Medium' ELSE 'Low' END [OK]
Hint: Check ranges carefully and order conditions top-down [OK]
Common Mistakes:
  • Wrong order of conditions causing misclassification
  • Syntax error using ELSE WHEN instead of WHEN
  • Missing inclusive range checks
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard