我是mySQL的新手并且处理一个查询,该查询基本上需要一个初始表并在两个单独的表中汇总其内容。第二个"摘要" table正在丢弃值为0的元组;我需要解决这个问题。以下是具体细节:
我有一个大型库存表,我从其他表中汇总:
SID CID SECTION RATING
==========================
100 1001 1 A
101 1001 1 A
102 1002 1 B
103 1002 2 F
104 1003 1 A
...etc...
(" CID"和#34;部分"是这里的主要关键,我不知道PK是否分布在两个属性上是很重要的。)我有成功的查询(" numTable1"),它计算每个CID和Section的SID数量。例如,使用上面的库存表," sumTable1"将是:
CID SECTION numSID
=====================
1001 1 2
1002 1 1
1002 2 1
1003 1 1
...etc...
这是SQL:
create temporary table numTable1(
SELECT ot1.cid, ot2.section, count(ot1.sid) 'numSID'
FROM otherTable1 ot1, otherTable2 ot2
WHERE ot1.cid=ot2.cid and ot1.section=ot2.section
GROUP BY ot1.cid, ot2.section
);
" NumTable"效果很好。这就是问题所在:我还需要一个查询来计算“A'”的数量。每个CID /部分的评级:
create temporary table numA(
select t9.cid, t9.section, count(ot1.rating) 'As'
from otherTable1 ot1, t9
where grade = 'A' and t9.cid=ot1.cid and t9.section=ot1.section
group by t9.cid, t9.section
);
这里是" numA"的输出:
CID SECTION As
=====================
1001 1 2
1003 1 1
...etc...
但这就是问题所在;一些CID /部门没有A评级,他们正在被淘汰。我需要的是:
CID SECTION As
=====================
1001 1 2
1002 1 0
1002 2 0
1003 1 1
...etc...
您需要注意的是,上表可以与" numTable1"无缝合并,这是最终目标:
CID SECTION numSID As
==========================
1001 1 2 2
1002 1 1 0
1002 2 1 0
1003 1 1 1
但只要" numA"滴水CID /部分为0,我死在水中。我假设我的"组由"声明" numA"正在淘汰零......但我对此并不确定。有什么建议吗?
答案 0 :(得分:0)
@NigelRen提供了解决方案 - 左连接。这是代码:
-- Left Join on numTable1 with numA... makes for total students // numAs
-- Resultant table is totA: "Total A Ratings"
create temporary table totA(
select numTable1.cid, numTable19.section, numTable1.numStudents, if(numA.As is null, 0, numA.As) 'A Ratings'
from numTable1
left join numA on numTable1.cid=numA.cid and numTable1.section=numA.section
);