SQL知识点:order by、百分比计算、count、case、if

1、多个order by条件的写法
首先按contest_id升序排序,如果contest_id相同,则按percentage降序排序

点击查看代码
#错误写法:使用了两次order by语句,这在SQL中是不允许的
order by
    percentage desc
order by
    contest_id

# 正确写法
ORDER BY  
    percentage DESC,  
    contest_id

2、百分比计算
在SQL中,使用* 100是正确的,而* 100%则不是有效的语法。%在SQL中主要用于模运算(即求余数)或在某些数据库系统中作为通配符使用(例如在LIKE语句中)。

3、count(a>3)是错误的

  • COUNT(a > 3) 是不正确的,因为 COUNT 函数不能直接用于计算条件表达式的真假值。
  • 使用 CASE 表达式或 WHERE 子句可以正确地计算满足特定条件的行数。
点击查看代码
select 
    count(case when a>3 then 1 end)
from
    table a
/*
CASE
 语句:CASE 语句在 SQL 中用于在查询中执行条件逻辑。它类似于其他编程语言中的 if-else 或 switch 语句。
WHEN
 子句:WHEN 子句后面跟着一个条件表达式(在这个例子中是 a > 3)。如果条件为真(即,如果 a 的值大于 3),则执行 THEN 后面的语句。
THEN
 语句:如果 WHEN 子句的条件为真,THEN 后面的语句会被执行。在这个例子中,THEN 1 表示如果 a > 3 为真,则返回数字 1。统计1的个数
END
 关键字:END 关键字表示 CASE 语句的结束。注意,虽然 CASE 表达式以 END 结尾,但它实际上并不“执行”任何操作;相反,它根据条件返回一个值。
 */

4、case的使用,使用场景上可以是对结果的再次筛选。
WHEN 子句后面跟着一个条件表达式,如果条件为真(即,条件表达式的结果为 TRUE),则执行与该 WHEN 子句相关联的 THEN 子句中的语句。如果没有任何 WHEN 子句的条件为真,并且 CASE 语句包含了一个 ELSE 子句,则执行 ELSE 子句中的语句。如果既没有 WHEN 子句的条件为真,也没有 ELSE 子句,则 CASE 表达式的结果为 NULL。

点击查看代码
CASE  
    WHEN condition1 THEN result1  
    WHEN condition2 THEN result2  
    ...  
    [ELSE resultN]  
END

# example
SELECT  
    name,  
    salary,  
    CASE  
        WHEN salary <= 3000 THEN 'Low'  
        WHEN salary BETWEEN 3001 AND 7000 THEN 'Medium'  
        WHEN salary > 7000 THEN 'High'  
        ELSE 'Not Specified'  
    END AS salary_level  
FROM  
    employees;

4、if的使用
mysql支持if的使用,其它数据库不一定支持。这个函数接受三个参数:条件表达式、如果条件为真时返回的值、以及如果条件为假时返回的值。

点击查看代码
# demo
select 
    count(case when a>3 then 1 end)
from
    table a
    
# example
 select
     sum(if(a>3,1,0))
from
    table a
5、avg+条件
avg(条件)相当于sum(if(条件,1,0))/count(全体)
sum(if(条件,N,0))/count(全体) 可用 N*avg(条件)代替
select
    100*avg(a>3)
from
    table a

posted @ 2025-02-26 10:58  测试三思  阅读(67)  评论(0)    收藏  举报