C# kapasite bilgisinin bozulması sql

SELECT 
    O.adi AS [OKUL ADI],
    SUM(S.kapasite) AS ToplamKontenjan
FROM TEST_OKULLAR O
INNER JOIN TEST_SINIFLAR S ON O.id = S.okul_id
GROUP BY O.adi,O.id
ORDER BY O.id

şöyle bir sorgum var bunu yazınca kapasite bilgisi doğru geliyor.
Her sınıfın bağlı olduğu kapasite bilgisini doğru alıyorum

Ama

SELECT 
    O.adi AS [OKUL ADI],
    COUNT(O1.id) AS DoluOgrenciSayisi,
    (SUM(S.kapasite) - COUNT(O1.id)) AS BosKontenjan,
    SUM(S.kapasite) AS ToplamKontenjan
FROM TEST_OKULLAR O
INNER JOIN TEST_SINIFLAR S ON O.id = S.okul_id
INNER JOIN TEST_OGRENCILER O1 ON O1.sinif_id = S.id
GROUP BY O.adi,O.id
ORDER BY O.id

Her bir okulun dolu öğrenci sayısını almak istediğimde kapasite bilgisi 45 olması gerekirken 240 oluyor sebebi ne olabilir ? Şimdiden teşekkür ederim

yani benim şu veriyi görmem gerekiyor normalde teker teker id’ye göre baktım cünkü

ama aralara şu sorguları ekledikten sonra şu şekil alıyor;

Bu, uc tabloyu birbiriyle carptigi icin siniflar birden fazla kere cikiyor muhtemelen. Agregasyonu (GROUP BY, SUM, COUNT) kaldirarak calistiginiz dataseti incelemenizi tavsiye ederim.

But tur sorgulari CTE veya subquery kullanarak gelistirmeniz daha kolay olacaktir.

1 Beğeni