我有以下oracle句子返回分组结果,例如一组中的10个,第二组中的8个。
我在计算它们时遇到了麻烦,因为看起来这个计数(*)作为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
答案 0 :(得分: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
/
答案 1 :(得分:0)
您在FROM语句中连接表但是S_STUDENTSKI_DOMOVI_VW stdm, MSB_SIF_STATUSOV_PROSENJ sifstat
表没有连接到WHERE语句中的其他表,因此它们连接所有行,并且无条件地获得FULL JOIN,因此COUNT输出您没有预料到的结果(乘以两个表的行数)。
答案 2 :(得分: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