2013-10-02 83 views
1

我有下列oracle語句返回分組結果,例如一個組的10個,第二個組的8個。Oracle count *和groupBy

我很難計算它們,因爲看起來像stevilo_prosenj計數(*)不能正常工作,所以如果有人能夠幫助我如何獲得每組中有多少結果計數,我將不勝感激。 。

謝謝

SELECT 
    PZB."OBD_ZA_POSILJANJE_PROSENJ_ID", 
    PZB."VISOKOSOLSKO_SREDISCE_ID", 
    leto.STUDIJSKO_LETO_ID, 
    OBD.VRSTA_PROSNJE vrsta_prosnje_string, 
    stdm.NAZIV_VRSTE_STUD_DOMOV naziv_vrste_stud_domov_ , 
    stdm.naziv naziv_stud_dom, 
    SIFSTAT.OZNAKA OZNAKA_STATUSA_PROSNJE, 
    count(*) as stevilo_prosenj 


    FROM MSB_PROSNJE_ZA_BIVANJE PZB, 
     S_OBD_POS_PRS_ZA_SUBV_VW OBD, 
     S_VISOKOSOLSKO_SREDISCE_VW vss, 
     S_STUDIJSKA_LETA_VW leto, 
     S_STUDENTSKI_DOMOVI_VW stdm, 
     MSB_SIF_STATUSOV_PROSENJ sifstat 

    WHERE PZB.OBD_ZA_POSILJANJE_PROSENJ_ID = OBD.OBD_ZA_POSILJANJE_PROSENJ_ID 
    AND vss.visokosolsko_sredisce_id  = pzb.visokosolsko_sredisce_id 
    AND obd.studijsko_leto_id   = leto.studijsko_leto_id 

GROUP BY 
    PZB."OBD_ZA_POSILJANJE_PROSENJ_ID", 
    PZB."VISOKOSOLSKO_SREDISCE_ID", 
    leto.STUDIJSKO_LETO_ID, 
    OBD.VRSTA_PROSNJE, 
    stdm.NAZIV_VRSTE_STUD_DOMOV, 
    stdm.naziv, 
    SIFSTAT.OZNAKA 
+2

你是什麼意思,不能正常工作? –

+3

笛卡爾產品在您的連接中可見。糾正相同的情況,可能會給你預計的數量 – SriniV

+1

如果你不告訴我們你有什麼和你的期望,我們沒有辦法幫助你。我猜你應該嘗試類似於'COUNT(DISTINCT theFieldOnWhichYouWantToCount)' –

回答

0

我會假設你想要一個GROUP BY,但不是在所有選定列...

如果你的數據庫支持的話,你可以

SELECT columnA, columnB, columnC, count(*) OVER (PARTITION BY columnA, columnB) 
FROM table; 

否則,你將不得不選擇它手動

SELECT a.columnA, a.columnB, a.columnC, b.countResult 
FROM ( SELECT columnA, columnB, columnC 
     FROM table 
     WHERE conditions 
    ) a 
JOIN 
    ( SELECT columnA, columnB, count(*) AS countResult 
     FROM table 
     GROUP BY columnA, columnB 
    ) b 
ON a.columnA = b.columnA 
AND a.columnB = b.columnB 
/
0

你在你的連接表FROM語句,但讓他們與所有的行連接S_STUDENTSKI_DOMOVI_VW stdm, MSB_SIF_STATUSOV_PROSENJ sifstat表沒有連接到他人在WHERE語句和您無條件地獲得FULL JOIN,因此COUNT輸出的結果不是您預期的(將這兩個表的行數相乘)。

0

我只是想感謝大家的輸入和幫助下,我已經因爲固定的問題,我只是發表我的解決方案,因爲我不喜歡留下懸而未決的問題

計數部分是給我的問題,我已經解決了它通過這樣做。

(SELECT COUNT(*) FROM MSB_PROSNJE_ZA_BIVANJE pzb2 
WHERE PZB2.VRSTA_STUD_DOMOV_ID=pzb.VRSTA_STUD_DOMOV_ID 
AND PZB2.MSB_STATUS=PZB.MSB_STATUS 
AND PZB2.OBD_ZA_POSILJANJE_PROSENJ_ID=pzb.OBD_ZA_POSILJANJE_PROSENJ_ID) stevilo 

全文。所以現在我選擇一切和組合,並且我也做了另一個選擇,我認爲所有受影響的人都是stevilo。它現在有效。

SELECT pzb.VRSTA_STUD_DOMOV_ID, 
pzb.MSB_STATUS, 
pzb.OBD_ZA_POSILJANJE_PROSENJ_ID, 
OBD.OBDOBJE_PRIKAZ, 
pzb.NAZIV_VRSTE_STUD_DOMOV, 
PZB.OZNAKA_STATUSA_PROSNJE, 
PZB.STUDIJSKO_LETO_ID, 
PZB.STUDENTSKI_DOM_ID, 
PZB.VISOKOSOLSKO_SREDISCE_ID, 
PZB.NAZIV_VISOKOSOLSKEGA_SREDISCA NAZIV_V_SREDISCA, 
PZB.NASLOV_VISOKOSOLSKEGA_SREDISCA NASLOV_V_SREDISCA, 
PZB.NAZIV_STUD_DOM, 
(SELECT COUNT(*) FROM MSB_PROSNJE_ZA_BIVANJE pzb2 
WHERE PZB2.VRSTA_STUD_DOMOV_ID=pzb.VRSTA_STUD_DOMOV_ID 
AND PZB2.MSB_STATUS=PZB.MSB_STATUS 
AND PZB2.OBD_ZA_POSILJANJE_PROSENJ_ID=pzb.OBD_ZA_POSILJANJE_PROSENJ_ID) stevilo 

FROM MSB_PROSNJE_ZA_BIVANJE_VW pzb, 
S_OBD_POS_PRS_ZA_SUBV_VW obd 

WHERE PZB.OBD_ZA_POSILJANJE_PROSENJ_ID=OBD.OBD_ZA_POSILJANJE_PROSENJ_ID 
GROUP BY pzb.VRSTA_STUD_DOMOV_ID, 
pzb.MSB_STATUS, 
pzb.OBD_ZA_POSILJANJE_PROSENJ_ID, 
OBD.OBDOBJE_PRIKAZ, 
pzb.NAZIV_VRSTE_STUD_DOMOV, 
PZB.OZNAKA_STATUSA_PROSNJE, 
PZB.STUDIJSKO_LETO_ID, 
PZB.VISOKOSOLSKO_SREDISCE_ID, 
PZB.NAZIV_VISOKOSOLSKEGA_SREDISCA, 
PZB.NASLOV_VISOKOSOLSKEGA_SREDISCA, 
PZB.NAZIV_STUD_DOM, 
PZB.STUDENTSKI_DOM_ID 
ORDER BY pzb.VRSTA_STUD_DOMOV_ID