我有如下关系:嵌套GROUP BY查询
C(ID,N) I(ID,G) IB(I_id,C_ID,R)
我想列出所有的 “N”从关系 “C”,其中它们的r等于 'H' 和最大的 “g” 等于 'T'
样本数据将是如下:
C:
C_ID, Ñ
C1,N1
C2,N2
C3,N3
IB:
C_ID,I_ID,R
C1,I1,H
C1, i2,H
c1,i3,N max H对于c1是t并且m
C2,I1,N
C2,I2,H
C2,I3,为C2 N MAX H是米
C3,I1,H
C3,I2,H
C3,I3,H最大值H表示C3是叔
I:
I_ID,G
I1,叔
I2,米
I3,叔
对于此示例数据C1和C3具有 'T'
下面的查询是一个答案最大 'H',但是它似乎未优化且非常重:
SELECT c1.n
FROM I ib1, C c1, I i1
WHERE i1.I_ID = ib1.I_ID
AND i1.g IN
(SELECT i.g
FROM IB ib, C c, I i
WHERE i.id = ib.I_id
AND c.id = ib.C_id
AND ib.r = 'H'
AND i.g = 't'
AND c.id = c1.id
GROUP BY i.g, c.id
HAVING COUNT(*)=(
SELECT max(COUNT(*))
FROM IB ib, C c, I i
WHERE i.id = ib.I_id
AND c.ID = ib.C_id
AND ib.r = 'H'
AND c.id = c1.id
GROUP BY i.g, c.id))
GROUP BY c1.id, c1.name;
很高兴让我知道什么是其他poss Ible解决方案以及如何优化我的查询。此外,我的桌子设计也是值得帮助的。 谢谢
不清楚“最大”g“等于't'”最大g每c.id其中ib.r ='H'?什么给你SELECT MAX(COUNT(*))? – Mottor
使用WITH子句或分析函数 – Thomas
但是,有些事情还不清楚......您正在连接表I两次,表C正在与哪个表连接?它的笛卡儿加入... – Thomas