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

  

 

posted @   Aaronqcd  阅读(131)  评论(0编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
点击右上角即可分享
微信分享提示