mysql获取上月月份

查看上个月数据

sql 复制代码
SELECT * FROM table WHERE date_format(time, '%Y %m') = date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH),'%Y %m')

查询上个月

sql 复制代码
select date_format(DATE_SUB(curdate(), INTERVAL 1 MONTH), '%m')

行转列

-- 行转列:方法①

sql 复制代码
SELECT
id,
name,
GROUP_CONCAT(CASE WHEN subject = '语文' THEN score END SEPARATOR '') '语文',
GROUP_CONCAT(CASE WHEN subject = '数学' THEN score END SEPARATOR '') '数学',
GROUP_CONCAT(CASE WHEN subject = '英语' THEN score END SEPARATOR '') '英语'
FROM test1
GROUP BY name;

-- 行转列:方法②

sql 复制代码
SELECT
id,
name,
SUM(IF(subject = '语文',score,0)) AS '语文',
SUM(IF(subject = '数学',score,0)) AS '数学',
SUM(IF(subject = '英语',score,0)) AS '英语'
FROM test1
GROUP BY name;

列转行

sql 复制代码
SELECT name,'语文' AS subject,语文 AS score FROM test2
UNION ALL
SELECT name,'数学' AS subject,数学 AS score FROM test2
UNION ALL
SELECT name,'英语' AS subject,英语 AS score FROM test2
ORDER BY name ASC,subject DESC;

总结:

行转列主要借助:CASE WHEN或IF,这两种都是判断条件,思路>当满足某个学科的时候我们把它当做新的一列。

列转行主要借助:UNION或UNION ALL,这两个都是把结果集合并起来,思路> 每次查询学生名称(基本列)和学科的其中一列的值,再把它们组合起来,这样你的结果集就是只有学生名称和科目成绩两列了。(我这里多加了一列科目)

相关推荐
山峰哥1 分钟前
《解锁SQL高效查询:从索引设计到执行计划优化》
服务器·数据库·sql·oracle·性能优化
2401_874732535 分钟前
实战:用Python分析某电商销售数据
jvm·数据库·python
songcream16 分钟前
Redis资料整理
数据库·redis·缓存
haoly198912 分钟前
数据库原理-查询优化示例
数据库·查询优化·逻辑等价性·物理层等价性
2301_7938046915 分钟前
Python内存管理机制:垃圾回收与引用计数
jvm·数据库·python
(@近墨清思%)16 分钟前
使用PyQt5创建现代化的桌面应用程序
jvm·数据库·python
小陈工19 分钟前
2026年3月25日技术资讯洞察:开源芯片革命、Postgres文件系统与AI Agent安全新范式
开发语言·数据库·人工智能·python·安全·web安全·开源
csdn_aspnet24 分钟前
MySQL安全加固十大硬核操作,从账号权限最小化到SSL加密,构建生产环境基础防护层
mysql·安全·ssl·waf
qq_2837200526 分钟前
MySQL实战(七):日常运维 SQL汇总
运维·sql·mysql
清风徐来QCQ30 分钟前
Servlet(Filter),Interceptor
数据库·servlet