行转列
学生表(student)
name | class | sex |
---|---|---|
小花 | 1 | 男 |
小明 | 1 | 女 |
小王 | 1 | 女 |
小孙 | 2 | 男 |
小张 | 2 | 男 |
小李 | 2 | 那 |
小红 | 3 | 女 |
小草 | 3 | 女 |
查询每个班级的男生和女生的数量
select class,
sum(case when sex = '女' then 1 else 0 end) 女,
sum(case when sex = '男' then 1 else 0 end) 男,
count(1) 总人数
from student
group by class
列转行
学生表(students)
name | 语文 | 数学 | 英语 |
---|---|---|---|
小明 | 99 | 96 | 65 |
小花 | 98 | 98 | 98 |
小草 | 98 | 94 | 78 |
具体实现代码
select a.`name`,a.科目,a.分数 from
(SELECT
NAME,
'语文' AS 科目 ,
MAX(语文) AS 分数
FROM students GROUP BY NAME
UNION
SELECT
NAME,
'数学' AS 科目 ,
MAX(数学) AS 分数
FROM students GROUP BY NAME
UNION
SELECT
NAME,
'语文' AS 科目 ,
MAX(英语) AS 分数
FROM students GROUP BY NAME) a
ORDER BY a.`NAME`
日期函数
返回当前日期和时间
select now();
返回当前日期
select curdate();
返回当前日期data是星期几
select dayofweek('2020-03-07');
日期相减
select datediff('2020-03-08','2020-03-01')
计算时间
select timediff('2021-03-08 00:00:00','2021-03-01 00:00:00')
字符串转换为日期
select str_to_date('01/09/00','%d/%m/%y');
select date_format('2020-01-09','%y/%m/%d');
select date_format('2020-01-09','%y-%m-%d');
select time_format('09:02:00','%H:%i:%s');