我有如下關係:嵌套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