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,这两个都是把结果集合并起来,思路> 每次查询学生名称(基本列)和学科的其中一列的值,再把它们组合起来,这样你的结果集就是只有学生名称和科目成绩两列了。(我这里多加了一列科目)

相关推荐
2601_960017623 小时前
啤酒行业PLM突围战:一半科技以配方与工艺数字化重构酿造食品研发体系
数据库·科技·重构
GIS数据转换器3 小时前
智慧林草“一张图“平台
java·大数据·服务器·前端·javascript·数据库·人工智能
gis开发之家3 小时前
Spring Boot 4 深度解析,JdbcTemplate 实战——轻量级数据库操作方案
java·数据库·spring boot·后端
李兆龙的博客3 小时前
问津集 #12:Calcspar:相同 Paid IOPS 下的 RocksDB 尾延迟优化
数据库
智购科技自动售卖机厂家3 小时前
2026自动售货机云端数据备份策略:从全量备份到增量恢复的工程实践~YH
数据库·stm32·嵌入式硬件·物联网·架构·零售
笔头子4 小时前
【Caché】数据库基础操作
数据库
上火的金鱼妹4 小时前
redis集群部署与连接
数据库·redis·缓存
程序员-Benothing4 小时前
MySQL 二级索引有 MVCC 快照吗?
数据库·mysql
xiaoxiangsiyan5 小时前
网络智能化转型核心模块全解析
运维·服务器·网络·数据库·学习·架构·php
不才不才不不才5 小时前
Spring 源码系列(25): @EnableTransactionManagement 与 TransactionInterceptor
java·数据库·spring