MySQL-SUM / COUNT并加入一条语句

时间:2019-01-07 14:57:53

标签: mysql sql group-by

我有两个要联接的表,并且要在同一条语句中求和和计数。

create table t1 (
code int(10) primary key,
Typ varchar(10) not null,
Status int(10) not null);


create table t2 (
code int(10) primary key,
Typ varchar(10) not null,
SubTyp varchar(10) not null);

insert into t1 values (1,'A',1);
insert into t1 values (2,'B',1);
insert into t1 values (3,'A',1);
insert into t1 values (4,'B',1);
insert into t1 values (5,'A',1);
insert into t1 values (6,'B',1);

insert into t2 values (1,'A','A1');
insert into t2 values (2,'A','A1');
insert into t2 values (3,'A','A2');
insert into t2 values (4,'B','B1');
insert into t2 values (5,'B','B2');
insert into t2 values (6,'B','B3');

从t1开始,我想要每个类型的总和,从t2开始,每个类型的SubTyp的不同计数。我需要达到的结果如下:

Sum Typ A   Sum Typ B   Count Typ A     Count Typ B Ratio A (count/sum) Ratio A (count/sum)
     3         3          2                  3        0.666666667          1

我可以在同一张桌子上进行求和和计数,但是当我需要加入它们时失败。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,则需要分别从两个表中计算计数,并使用?CDate(0.373611111111111) 08:58:00 合并它们:

?CDbl(TimeSerial(8,58,0))
 0,373611111111111 

您可能希望根据总和的定义将第一个子查询中的CROSS JOIN替换为SELECT a1.count_a , a1.count_b , a2.count_a , a2.count_b , a2.count_a / a1.count_a AS ratio_a , a2.count_b / a1.count_b AS ratio_b FROM ( SELECT COUNT(CASE WHEN typ = 'A' THEN 1 END) AS count_a , COUNT(CASE WHEN typ = 'B' THEN 1 END) AS count_b FROM t1 ) a1 CROSS JOIN ( SELECT COUNT(DISTINCT CASE WHEN typ = 'A' THEN SubTyp END) AS count_a , COUNT(DISTINCT CASE WHEN typ = 'B' THEN SubTyp END) AS count_b FROM t2 ) a2