selecteren op SUM resultaat
mar kla
15/02/2015 22:33:45Met de onderstaande code wil ik spelers uit de database selecteren die 100 wedstrijd of meer gespeeld hebben.
Daarvoor heb ik twee waardes: een basis plek = Basis, en een inval beurt = Wisselin
Nu wil ik graag iets selecteren in de trend van De Basis + Wisselin< 101
een :
Where SUM( IF( dt.af_DetailType_ID IN ( 1, 3 ) , 1, 0 ) ) < 101
of
LIMIT total
weken dus niet
wat kan/moet ik doen om het wel voor elkaar te krijgen?
Daarvoor heb ik twee waardes: een basis plek = Basis, en een inval beurt = Wisselin
Nu wil ik graag iets selecteren in de trend van De Basis + Wisselin< 101
een :
Where SUM( IF( dt.af_DetailType_ID IN ( 1, 3 ) , 1, 0 ) ) < 101
of
LIMIT total
weken dus niet
wat kan/moet ik doen om het wel voor elkaar te krijgen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT
p.Player_Achternaam,
p.Player_Voornaam,
p.Player_Tussenvoegsel,
SUM( IF( dt.af_DetailType_ID = '1', 1, 0 ) ) AS BASIS,
SUM( IF( dt.af_DetailType_ID = '3', 1, 0 ) ) AS Wisselin,
SUM( IF( dt.af_DetailType_ID IN ( 1, 3 ) , 1, 0 ) ) AS total
FROM
af_details dt,
af_players p,
af_games g
WHERE
af_DetailType_ID IN ( 1, 3 )
AND
p.Player_ID = dt.af_Player_ID
AND
g.Game_ID = af_Game_ID
AND
GameType_ID IN ( 1, 2 )
GROUP BY
dt.af_Player_ID
ORDER BY total DESC
p.Player_Achternaam,
p.Player_Voornaam,
p.Player_Tussenvoegsel,
SUM( IF( dt.af_DetailType_ID = '1', 1, 0 ) ) AS BASIS,
SUM( IF( dt.af_DetailType_ID = '3', 1, 0 ) ) AS Wisselin,
SUM( IF( dt.af_DetailType_ID IN ( 1, 3 ) , 1, 0 ) ) AS total
FROM
af_details dt,
af_players p,
af_games g
WHERE
af_DetailType_ID IN ( 1, 3 )
AND
p.Player_ID = dt.af_Player_ID
AND
g.Game_ID = af_Game_ID
AND
GameType_ID IN ( 1, 2 )
GROUP BY
dt.af_Player_ID
ORDER BY total DESC
Gewijzigd op 15/02/2015 22:34:11 door Mar kla
PHP hulp
16/11/2024 15:54:12Implicite joins zijn niet volgens de huidige SQL standaard, leer dit af.
In SQL wordt eerst geselecteerd en gefiltered, dan gegroepeerd (de where staat voor de group by), dus je kan geen aggegrate functies in de where clause gebruiken.
Je hebt hier GROUP BY ... HAVING nodig:
In SQL wordt eerst geselecteerd en gefiltered, dan gegroepeerd (de where staat voor de group by), dus je kan geen aggegrate functies in de where clause gebruiken.
Je hebt hier GROUP BY ... HAVING nodig:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT
p.Player_Achternaam,
p.Player_Voornaam,
p.Player_Tussenvoegsel,
SUM(dt.af_DetailType_ID = 1) AS BASIS,
SUM(dt.af_DetailType_ID = 3) AS Wisselin,
COUNT(*) AS total
FROM
af_players p
JOIN
af_details dt
ON p.Player_ID = dt.af_Player_ID
JOIN
af_games g
ON g.Game_ID = af_Game_ID
WHERE
af_DetailType_ID IN (1,3)
AND
g.GameType_ID IN (1,2)
GROUP BY
dt.af_Player_ID
HAVING total >= 100
p.Player_Achternaam,
p.Player_Voornaam,
p.Player_Tussenvoegsel,
SUM(dt.af_DetailType_ID = 1) AS BASIS,
SUM(dt.af_DetailType_ID = 3) AS Wisselin,
COUNT(*) AS total
FROM
af_players p
JOIN
af_details dt
ON p.Player_ID = dt.af_Player_ID
JOIN
af_games g
ON g.Game_ID = af_Game_ID
WHERE
af_DetailType_ID IN (1,3)
AND
g.GameType_ID IN (1,2)
GROUP BY
dt.af_Player_ID
HAVING total >= 100