沙滩星空的博客沙滩星空的博客

SQL之select条件判断:IF, CASE, INTERVAL, ELT

IF 函数

select t.name,if(t.weight<80,'正常','肥胖') 体重 from t_customer t

CASE WHEN 语句

CASE WHEN ... THEN ...[WHEN ... THEN ...] ELSE ... END: 可包含多个 WHEN ... THEN ...子句

SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN 'The quantity is greater than 30'
    WHEN Quantity = 30 THEN 'The quantity is 30'
    ELSE 'The quantity is under 30'
END AS QuantityText
FROM OrderDetails;

case具有两种格式。简单case函数和case搜索函数。简单的case函数较简介,case搜索函数功能更全。case函数只返回第一个符合条件的值,剩下的case部分将会被自动忽略。

--简单case函数
case sex
  when '1' then '男'
  when '2' then '女’
  else '其他' end

--case搜索函数
case when sex = '1' then '男'
     when sex = '2' then '女'
     else '其他' end
 
--比如说,下面这段sql,你永远无法得到“第二类”这个结果
case when col_1 in ('a','b') then '第一类'
     when col_1 in ('a') then '第二类'
     else '其他' end

INTERVAL 分段函数

INTERVAL(N,N1,N2,N3,..........): N是要判断的数值,N1,N2,N3,...是分段的间隔。

INTERVAL函数的返回值是 段的位置
如果N<N1,则返回0,
如果N1<=N<N2,则返回1,
如果N2<=N<N3,则返回2。
所以,区间是 前闭后开 (大于等于小的数,小于大的数)。

SELECT id,percent,INTERVAL(percent,25,50) from test;
-- 还可以把INTERVAL()函数用在GROUP BY中:
SELECT
       INTERVAL (percent, 0, 26, 51),
       COUNT(1)
FROM
       test
GROUP BY
       INTERVAL (percent, 0, 26, 51);

ELT 分值函数

ELT(N,str1,str2,str3,...): N是要判断的数值,如果N=1,则返回str1,如果N=2,则返回str2,以此类推。

SELECT id,percent,ELT(id,'id is 1','id is 2') from test;

SELECT
    t. NAME,
    ELT(t.LEVEL, '超级VIP', 'VIP', '普通') 客户类型
FROM
    t_customer t

MYSQL中可以实现类似IF判断的方法 https://www.cnblogs.com/lihaoyang/p/6733002.html
SQL CASE Expression https://www.w3schools.com/sql/sql_case.asp
SQL CASE语句的使用 https://www.navicat.com.cn/company/aboutus/blog/341-sql-case
Mysql的分段函数INTERVAL()和分值函数ELT() https://blog.csdn.net/lkforce/article/details/109537495
SQL中的条件判断语句(case when zhen if,ifnull)用法 https://www.cnblogs.com/hao-1234-1234/p/11466179.html
未经允许不得转载:沙滩星空的博客 » SQL之select条件判断:IF, CASE, INTERVAL, ELT

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址