sql 统计用的sql

时间:2023-03-08 22:27:10
sql 统计用的sql

mh:工时   mhtype:工时类型(6种)

字段:userid      mhtype    mh
      001          1        5
      001          1        3
      001          2        4
      001          3        9
      002          5        5
      002          6        7
      002          3        4
      002          3        9

要求统计出每个人每一类工时的总合
结果要求如下格式
userid  mhtype1   mhtype2   mhtype3   mhtype4   mhtype5   mhtype6   allmh
001     8         4          9        0           0         0        21
002     0         0          13        0           5         7        25

-------------------

create table lk4(
userid mediumint(3) unsigned zerofill not null,
mhtype int not null,
mh int not null);
insert into lk4 values
(001,1,5),
(001,1,3),
(001,2,4),
(001,3,9),
(002,5,5),
(002,6,7),
(002,3,4),
(002,3,9);
select userid,
sum((case when mhtype=1 then mh else end )) as 'mhtype1',
sum((case when mhtype=2 then mh else end )) as 'mhtype2',
sum((case when mhtype=3 then mh else end )) as 'mhtype3',
sum((case when mhtype=4 then mh else end )) as 'mhtype4',
sum((case when mhtype=5 then mh else end )) as 'mhtype5',
sum((case when mhtype=6 then mh else end )) as 'mhtype6',
sum(mh) as 'allmh'
from lk4 group by userid;

结果:

+--------+---------+---------+---------+---------+---------+---------+-------+
| userid | mhtype1 | mhtype2 | mhtype3 | mhtype4 | mhtype5 | mhtype6 | allmh |
+--------+---------+---------+---------+---------+---------+---------+-------+
|    001 |       8 |       4 |       9 |       0 |       0 |       0 |    21 |
|    002 |       0 |       0 |      13 |       0 |       5 |       7 |    25 |
+--------+---------+---------+---------+---------+---------+---------+-------+
2 rows in set (0.00 sec)

*******************************

数据结构如下
 id    name    area
 01    a       河北
 02    b       山东
 03    c       河北  
 04    d       陕西
 05    e       河北
 06    f       山东
 
也即每个用户都有id,name,area
 现要求如下:
 按地区聚合并统计用户数、显示各用户详细情况
 
大概类似于下面的结果:
 地区  总用户数   详细用户
 河北   3       (01,a),(03,c),(05,e)
 山东   2       (02,b),(06,f)
 陕西   1       (04,d)

select area,count(*),group_concat('(',id,',',name,')')
from tb
group by area

************

sql 统计用的sql

这是源数据,根据不同的adminid,算出每个adminid有多少条数据,并且state为0的有几条,为1的有几条
返回结果是这样的:

adminid total state0 state1
   1         100   90        10
  2          111   55        56
total是state的总数,state0是state=0的数量,state1是state=1的数量,adminid是adminid

然后将以下得到的数据全部插入表2内:

表2字段为:

adminid s_total s_state0 s_state1

insert into tb2
select adminid,count(*) as total,
count(case when state=0 then 1 end) as state0,
count(case when state=1 then 1 end) as state1
from tb
group by adminid

***********

一。以产品编码为分类进行数量的汇总

SQL code?
1
2
3
select 产品编码,sum(购买数量)
from 表结构
group by 产品编码

二。在汇总的基础上,我要对每个产品编码按发货地区进行分类汇总。

SQL code?
1
2
3
select 产品编码,发货地区,sum(购买数量)
from 表结构
group by 产品编码,发货地区