我有两个要联接的表,并且要在同一条语句中求和和计数。
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
我可以在同一张桌子上进行求和和计数,但是当我需要加入它们时失败。
答案 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
。