mysql sql记录
1.如何在同一个查询中统计同一个列的不同值的数量,以减少查询的语句量。
例如,假设可能需要通过一个查询返回不同层级的列表菜单数量,可以通过以下语句进行查询:
select SUM(IF(functionlevel='0',1,0)) as 第一级,SUM(IF(functionlevel='1',1,0)) as 第二级,
SUM(IF(functionlevel='2',1,0)) as 第三级, SUM(IF(functionlevel='3',1,0)) as 第四级, SUM(IF(functionlevel='4',1,0)) as 第五级
, SUM(IF(functionlevel='5',1,0)) as 第六级 from t_s_function
或者:
select SUM(functionlevel='0') as 第一级,SUM(functionlevel='1') as 第二级,
SUM(functionlevel='2') as 第三级, SUM(functionlevel='3') as 第四级, SUM(functionlevel='4') as 第五级
, SUM(functionlevel='5') as 第六级 from t_s_function
还可以采用以下语句查询:
select COUNT(functionlevel='0' or null) as 第一级,COUNT(functionlevel='1' or null) as 第二级,
COUNT(functionlevel='2' or null) as 第三级, COUNT(functionlevel='3' or null) as 第四级, COUNT(functionlevel='4' or null) as 第五级
, COUNT(functionlevel='5' or null) as 第六级 from t_s_function
变形:
select count(*),functionlevel from t_s_function GROUP BY functionlevel
2.如何在一张表中根据某个字段进行分组,并取该字段同值时的最新或最久的数据。
例如:有如下数据:
现要根据code字段进行分组,即只获取code值相同的一条记录,且该记录的in_repertory_date字段要在同code值的记录中是最小的。希望的数据如下所示:
那么该sql如下所示即可实现该功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | select * from materiel_bank_account, ( select * from ( select min (in_repertory_date) as min_time from materiel_bank_account GROUP BY code) temp GROUP BY min_time) a where in_repertory_date = a.min_time order by in_repertory_date desc |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析