介绍MYSQL中的逻辑表达式。
1.IF表达式
''' IF([your conditions],[value outputted if conditions are met],[value outputted if conditions are NOT met]) ''' SELECT created_at, IF(created_at<'2014-06-01','early_user','late_user') AS user_type FROM users
嵌入IF(nested IF ):
''' We could use a nested query to say whenever "country" does not equal "US", use the results of a second IF expression to determine whether the outputed value should be "Not Applicable" or "Outside US."
The IF expression would look like this ''' IF(cleaned_users.country='US','In US', IF(cleaned_users.country='N/A','Not Applicable','Outside US'))
%%sql SELECT IF(cleaned_users.country='US', 'In US', IF(cleaned_users.country='N/A','Not Applicable', 'Outside US')) AS US_user, COUNT(cleaned_users.user_guid) FROM (SELECT DISTINCT user_guid, country FROM users WHERE country IS NOT NULL) AS cleaned_users GROUP BY US_user
2.CASE 语句
%%sql SELECT CASE WHEN cleaned_users.country="US" THEN "In US" WHEN cleaned_users.country="N/A" THEN "Not Applicable" ELSE "Outside US" END AS US_user, COUNT(cleaned_users.user_guid) FROM (SELECT DISTINCT user_guid, country FROM users WHERE country IS NOT NULL) AS cleaned_users GROUP BY US_user
或者可以写成如下形式:
''' CASE_Value ''' %%sql SELECT CASE cleaned_users.country WHEN "US" THEN "In US" WHEN "N/A" THEN "Not Applicable" ELSE "Outside US" END AS US_user, COUNT(cleaned_users.user_guid) FROM (SELECT DISTINCT user_guid, country FROM users WHERE country IS NOT NULL) AS cleaned_users GROUP BY US_user
%%sql SELECT d.dog_guid, d.weight, CASE WHEN d.weight>0 AND d.weight <= 10 THEN "very small" WHEN d.weight>10 AND d.weight <= 30 THEN "small" WHEN d.weight>30 AND d.weight <= 50 THEN "medium" WHEN d.weight>50 AND d.weight <= 85 THEN "large" WHEN d.weight>85 THEN "very large" END AS Dog_size FROM dogs d LIMIT 200;
3. 逻辑表达式
NOT, AND, OR
''' CASE WHEN "condition 1" OR "condition 2" AND "condition 3" CASE WHEN "condition 3" AND "condition 1" OR "condition 2" CASE WHEN ("condition 1" OR "condition 2") AND "condition 3" ''' SELECT COUNT(DISTINCT dog_guid), CASE WHEN breed_group='Sporting' OR breed_group='Herding' AND exclude!='1' THEN "group 1" ELSE "everything else" END AS groups FROM dogs GROUP BY groups