[(My)SQL] twee counts van twee group by's

Pagina: 1
Acties:

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07-2025
Zit ik al effe aan bezig en mijn SQL is niet goed genoeg om het te doen werken:

Table "Group" met daarin een ID
Table "Results" met daarin een key naar Group en een "Type" field.

Er zijn twee values mogelijk voor dat Type attribute (1 / 0).

Nu wil ik dus per "Group" weten hoeveel er aantal Type fields 0 en 1 zijn. (in 1 row)

Waarschijnlijk heel simpel maar mijn kop draait dol:)

Dit heb ik al:

SELECT g.name, g.id, COUNT(r.id)
FROM groups AS g LEFT JOIN results AS r ON g.id = r.groupid
GROUP BY g.id, r.type

Maar dan krijg ik dus per group 2 rows. ook zie ik niet in hoe ik een "conditie" er kan invoegen aan gezien dit slecht voor 1 gaat werken.

in "lamers" SQL:
FOR EACH GROUP RETURN
GROUP.id
COUNT(Results.type == '0')
COUNT(Results.type == '1')

Heb al heelder SQL tuts doorzocht maar het gaat me niet vlot af ;).

offtopic:
normaal gebruik ik Persitent Storage Frameworks die de SQL voor me maken



Tuurlijk vind ik het dan net iets later zelf: Mooi is het niet en snel nog minder dnek ik:

SELECT
g.id,
SUM(CASE WHEN r.type = 0 THEN 1 ELSE 0 END) as count_type0,
SUM(CASE WHEN r.type = 1 THEN 1 ELSE 0 END) as count_type1
FROM groups AS g LEFT JOIN results AS r ON g.id = r.groupid
GROUP BY g.id, r.type

dus snellere mogelijkheden altijd welcome ;).

[ Voor 27% gewijzigd door hobbit_be op 12-12-2003 15:53 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

je query is imho helemaal niet zo vies, ik gebruik het zelf ook wel eens.

Andere methoden, behalve losse queries of unions, zijn er denk ik niet eens.
Ow anders kan je nog dit doen:

SELECT IFNULL(r.type, -1) as type, g.name, g.id, COUNT(r.id)
FROM groups AS g LEFT JOIN results AS r ON g.id = r.groupid
GROUP BY type, g.id
?