使用两个字段同时order by 排序
sql支持多个字段进行order by排序,各字段之间用逗号”,”隔开。如:
SELECT *FROM tablename order by column1,column2,column3 ;
如果不显示指出是升序还是降序,则默认为是升序12
(1)ORDER BY column1,column2;
表示:column1和column2都是升序
(2)ORDER BY column1,column2 DESC;
表示:column1 升序,column2是降序;
(3)ORDER BY column1 DESC,column2;
表示:column1降序,column2升序
(4)ORDER BY column1 DESC,column2 DESC;
表示:column1和column2都是降序。
注:想要对两个字段都同是进行升序/降序操作时候,必须得同时在每个字段
的后面加上关键字(asc/desc)。若是想要对两个关键字段按升序排序,
前面一个字段没有写关键字asc没关系,因为sql默认就是升序;但是若是
想要对两个关键字段进行降序操作,则必须得对两个关键字段都加上desc;
如: column1 desc,column2 desc;
SQL中的case when then else end用法
简单用法:
1.第一种写法:
SELECT
s.s_id,
s.s_name,
s.s_sex,
CASE
WHEN s.s_sex = '1' THEN '男'
WHEN s.s_sex = '2' THEN '女'
ELSE '其他'
END as sex,
s.s_age,
s.class_id
FROM
t_b_student s
WHERE
1 = 1
2.第二种写法
SELECT
s.s_id,
s.s_name,
s.s_sex,
CASE s.s_sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他'
END as sex,
s.s_age,
s.class_id
FROM
t_b_student s
WHERE
1 = 1
两个运行结果一样:
有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略
分组
表数据:
t_b_population
sql语句:
SELECT country,
SUM(CASE WHEN p.sex = '1' THEN p.population ELSE 0 END) AS '男',
SUM(CASE WHEN p.sex = '2' THEN p.population ELSE 0 END) AS '女'
FROM
t_b_population p
GROUP BY country;
运行结果:
表数据:
t_b_country
sql语句:
SELECT
SUM(c.population) AS '人口',
CASE c.country
WHEN '中国' THEN '亚洲'
WHEN '印度' THEN '亚洲'
WHEN '日本' THEN '亚洲'
WHEN '美国' THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他' END AS '洲'
FROM
t_b_country c
GROUP BY CASE c.country
WHEN '中国' THEN '亚洲'
WHEN '印度' THEN '亚洲'
WHEN '日本' THEN '亚洲'
WHEN '美国' THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他' END;
运行结果:
order by 与 case when
假设有表employee,数据记录如下:
执行如下语句
SELECT EmployeeName, Gender, Salary
FROM Employee
ORDER BY CASE Gender
WHEN 'F' THEN Salary End DESC,
Case WHEN Gender='M' THEN Salary END
在输出结果中,我们实现了根据不同的性别排序方式不同,具体如下:
- 女性员工,薪资按降序排列。
-男性员工,薪资按升序排列。
where 与case when
select * from 表
where 1=1
and (case when a=1 then a when 表.字段='asdfasdf' then b end)='值