webForumDet fria alternativet

Räkna poster med beroenden på andra tabeller

Databaser & SQL

2 svar · 357 visningar · startad av SPiN

Medlem sedan mars 20007 896 inlägg
Frågan#1

Hej!

Jag har ett antal tabeller;

Uppdrag
-------
id      öppen       län         ...

Arbetsgivare
------------
id      namn        ...

Plats
-----
id      län         ...

UppdragFörArbetsgivare
----------------------
uppdrag             arbetsgivare

Ett uppdrag hör till precis ett (1) län, men kan tillhöra flera uppdragsgivare. En uppdragsgivare kan ha flera uppdrag.

Nu vill jag räkna upp antalet uppdrag i ett län, som gäller för en specifik arbetsgivare. Jag verkar inte komma runt SQL-frågan, då jag i resultatet enbart får ut antal uppdrag i ett län - oberoende av arbetsgivare.

T.ex:
Förväntat resultat: (exempel)

län                 uppdragsRäknare
---                 ---------------
Stockholm           5
Västra Götaland     8
Dalarna             2
...

Men jag får istället då ut antalet totala uppdrag i länet: (exempel)

län                 uppdragsRäknare
---                 ---------------
Stockholm           45
Västra Götaland     32
Dalarna             9
...

Frågan för att räkna alla uppdrag grupperat efter län, oberoende av uppdragsgivare:

SELECT p.län, COUNT(u.id) AS uppdragsRäknare
FROM Plats p
    LEFT OUTER JOIN Uppdrag u
        ON p.id=u.län
        AND u.är_öppen=1
GROUP BY p.län
ORDER BY p.län ASC

Frågan som jag försöker ställa, men får ett likadant resultat:

SELECT p.län, COUNT(u.id) AS uppdragsRäknare
FROM Plats p
    LEFT OUTER JOIN Uppdrag u
        ON p.id=u.län
        AND u.är_öppen=1
    LEFT OUTER JOIN UppdragFörArbetsgivare ufa
        ON ufa.uppdrag=u.id
        AND ufa.arbetsgivare=5
GROUP BY p.län
ORDER BY p.län ASC

Har nu försökt med olika typer av joins - men det känns som att jag slår huvudet mot väggen hela tiden då jag får exakt samma resultat... Så jag känner att jag behöver lite hjälp. :)

Tack!

Medlem sedan dec. 20025 483 inlägg
#2
SELECT p.län, sum(case when ufa.arbetsgivare is not null then 1 else 0 end) AS uppdragsRäknare
FROM Plats p
    LEFT OUTER JOIN Uppdrag u
        ON p.id=u.län
        AND u.är_öppen=1
    LEFT OUTER JOIN UppdragFörArbetsgivare ufa
        ON ufa.uppdrag=u.id
        AND ufa.arbetsgivare=5
GROUP BY p.län
ORDER BY p.län ASC
Medlem sedan mars 20007 896 inlägg
#3

Asbra! Tack!

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)