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

相关推荐
Lxinccode2 小时前
Java查询数据库表信息导出Word-获取数据库实现[1]:KingbaseES
java·数据库·word·获取数据库信息·获取kingbasees信息
豆沙沙包?3 小时前
5.学习笔记-SpringMVC(P61-P70)
数据库·笔记·学习
朴拙数科5 小时前
MongoDB Atlas与MongoDB连接MCP服务器的区别解析
服务器·数据库·mongodb
柏油5 小时前
MySQL InnoDB 行锁
数据库·后端·mysql
A-Kamen5 小时前
MySQL 存储引擎对比:InnoDB vs MyISAM vs Memory
数据库·mysql·spark
极限实验室5 小时前
【Workshop 第一期 - 北京站】搜索服务统一治理(跨引擎多个集群监控管理、流量管控、服务编排)
数据库
鹏翼丶6 小时前
搭建动态SQL取数
数据库·sql·动态sql
辰哥单片机设计6 小时前
PH传感器详解(STM32)
数据库·mongodb
JavaAlpha6 小时前
面试题:Redis 一次性获取大量Key的风险及优化方案
数据库·redis·bootstrap
尽兴-6 小时前
Mac「brew」快速安装Redis
数据库·redis·macos·brew