条件判断

IF

IF表达式

IF(expr1,expr2,expr3)

如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

select *,if(sva=1,"男","女"),if as ssva from taname where sva != ""


Case When

Case When

当我们需要从数据源上 直接判断数据显示代表的含义的时候 ,就可以在SQL语句中使用 Case When这个函数了

CAST( sum(CASE transfer.contract_type  WHEN 1 THEN land.contract_area  else 0 END )  AS DECIMAL ( 16, 2 ) ) AS type_noe
SUM( CASE contract_type WHEN 2 THEN area WHEN 0 THEN area END ) AS measured_n
SQL> select u.id,u.name,u.sex,
   (case u.sex
     when 1 then '男'
     when 2 then '女'
     else '空的'
     end
    )性别
 from users u;
case when sex = '1' then '男'
     when sex = '2' then '女'
     else '其他' end
case when col_1 in ('a','b') then '第一类'
     when col_1 in ('a') then '第二类'
     else '其他' end
SQL> select
   sum(case u.sex when 1 then 1 else 0 end)男性,
   sum(case u.sex when 2 then 1 else 0 end)女性,
   sum(case when u.sex <>1 and u.sex<>2 then 1 else 0 end)性别为空
 from users u;
SUM( CASE WHEN end_date = '0000-00-00' AND contract_type = 0 THEN area ELSE 0 END ) AS measured_y
SELECT
count( id ) AS manager_count,
SUM( CASE type WHEN 1 THEN 1 ELSE 0 END ) AS manager_type_one,
SUM( CASE type WHEN 2 THEN 1 ELSE 0 END ) AS manager_type_two,
SUM( CASE type WHEN 3 THEN 1 ELSE 0 END ) AS manager_type_three,
SUM( CASE type WHEN 4 THEN 1 ELSE 0 END ) AS manager_type_fout,
SUM( CASE type WHEN 7 THEN 1 ELSE 0 END ) AS manager_type_seven 
FROM
`onethink_nft_manager`
LIMIT 1
$sql_count = $nft_base_land_transfer_new
->where($transfer_new_map)
->group('manager_id')
->field('`manager_id`')
->select(false);
$count_data = $nft_manager
->table('onethink_nft_manager AS M')
->join('LEFT JOIN '.$sql_count.' AS T ON T.manager_id = M.id ')
->where($map)
->field('count( id ) AS manager_count,
SUM( CASE M.type WHEN 1 THEN 1 ELSE 0 END ) AS manager_type_one,
SUM( CASE M.type WHEN 2 THEN 1 ELSE 0 END ) AS manager_type_two,
SUM( CASE M.type WHEN 3 THEN 1 ELSE 0 END ) AS manager_type_three,
SUM( CASE M.type WHEN 4 THEN 1 ELSE 0 END ) AS manager_type_fout,
SUM( CASE M.type WHEN 7 THEN 1 ELSE 0 END ) AS manager_type_seven')
->find()