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

  

 

posted @ 2018-08-31 11:24  Aaronqcd  阅读(130)  评论(0编辑  收藏  举报