Axel Richter: postgreSQL -> Aggregate in where-Klausel

Beitrag lesen

Hallo,

HAVING (((Avg(rating))>=8 And (Avg(rating))<=9));
das hatte ich nicht, es hilft aber auch nicht
(kann mir mal bitte jemand den Sinn von having erklären???)

http://www.postgresql.org/idocs/index.php?queries-table-expressions.html#QUERIES-GROUP

Well: here it comes

Puuh! Naja, ich wurde ja gewarnt. *g*

SELECT
u.surname,
u.name,
s.skinid,
s.skin,
s.screenshot,
s.skdate,
avg(sr.rating) AS MW_rating,
--- Bitte nicht rating (einen Feldnamen) als alias benutzen.

count(sr.rating) AS votes
from userdata u, skin s, skinrating sr
WHERE
u.uid=s.uid AND
s.activ='t' AND
sr.skinid = s.skinid AND
u.deleted='f' AND
s.deleted='f' AND
---
rating>=7 AND
rating<=10 AND
--- Hier schließt Du alle ratings <7 und >10 von der Gruppierung und damit auch von der Mittelwertberechnung aus. Diese Bedingungen bitte entfernen.

skdate>='2002-01-01' AND
skdate<='2003-01-20'
GROUP by u.surname, u.name, s.skinid, s.skin, s.screenshot, s.skdate

HAVING (((Avg(sr.rating))>=7 And (Avg(sr.rating))<=10))
---
Du willst, dass die _Mittelwerte_ zwischen 7 un 10 liegen!
---
UNION SELECT u.surname, u.name, s.skinid, s.skin, s.screenshot, s.skdate, 0,0 FROM userdata u, skin s, skinrating sr WHERE u.uid=s.uid AND s.activ='t' AND u.deleted = 'f' AND s.deleted = 'f' AND skdate>='2002-01-01' AND skdate<='2003-01-20' AND not exists (SELECT * FROM skinrating sr WHERE sr.skinid = s.skinid) ORDER BY rating desc LIMIT 5 OFFSET 0
---
Keine Ahnung, ob diese UNIONs noch richtig sind.

Puuh *gg*

Gruß

Axel