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如下所示即可实现该功能:

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

  

 

转载于:https://www.cnblogs.com/Aaronqcd/p/9564838.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值