1

我有以下 oracle 语句返回分组结果,例如一组 10 个,第二组 8 个。

我在计算它们时遇到了麻烦,因为这个 count(*) as 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
4

3 回答 3

0

我将假设您想要一个 GROUP BY,但不是在所有 SELECTed 列上...

如果您的数据库支持它,您可以

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
/
于 2013-10-02T09:05:38.880 回答
0

您在 FROM 语句中连接表,但S_STUDENTSKI_DOMOVI_VW stdm, MSB_SIF_STATUSOV_PROSENJ sifstat在 WHERE 语句中表未连接到其他表,因此它们与所有行连接,并且您在没有条件的情况下获得 FULL JOIN,因此 COUNT 输出您未预期的结果(乘以两个表的行数)。

于 2013-10-02T09:07:02.250 回答
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
于 2013-10-17T12:35:27.670 回答