[mysql] group by

Pagina: 1
Acties:
  • 25 views sinds 30-01-2008

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Ik blijf moeite hebben met mysql's GROUP BY clause en helaas schiet de documentatie in uitleg te kort. De search hier en op google ook...

---------------------

Correctie. Hier iemand met eenzelfde probleem: [rml][ mysql] snap resultaat van group by en max niet[/rml]

Ik geloof dat ik onderstaande probleem toch maar anders ga aanpakken. Postgresql is helaas geen optie.

---------------------

Ik heb het volgende, volgens mij relatief simpel, probleempje....

tabel:
code:
1
2
3
4
5
6
7
id    num   title    date
1     1       abc     2004-01-01
2     1       abc     2004-02-08
3     1       abc     2004-03-02
4     2       def     2004-01-05
5     3       ghi     2004-01-01
6     3       ghi     2004-01-02


Uit deze tabel wil ik twee afzonderlijke resultsets zien te halen:

1. gegroupeerd op num met alleen de laatste date
2. gegroupeerd op num met alleen de niet laatste date

code:
1
select id, num, title, date from reports group by num


levert simpelweg het eerste record op van een group (dus id 1, 4 en 5).

En als ik zoiets probeer:

code:
1
select id, num, title, date from reports group by num having date=max(date)


dan krijg ik slechts 1 rij terug (rij met id=4) om mij niet duidelijke redenen.

Als ik MAX(date) ook opvraag bij de select, dan klopt deze wel, maar als ik de MAX(date) gebruik in een WHERE of HAVING dan krijg ik niet terug wat ik wil hebben.

Hoe pak je zoiets nou wel aan?

[ Voor 13% gewijzigd door Explore op 03-08-2004 13:17 ]

[ specs ] [ Tweaker gallery ]


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Begin hier eens mee:
Als je een group by gebruikt mag je alleen de kolommen waar je op groepeert gewoon in je select list opnemen, de rest moet via een aggregatie-functie.

Verder is de having clausule om groepen uit te sluiten, die wordt dus pas na het groeperen toegepast, dat wil je hier dus niet.

Who is John Galt?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Explore schreef op 03 augustus 2004 @ 12:37:
1. gegroupeerd op num met alleen de laatste date
Dit is basis SQL-kennis.
2. gegroupeerd op num met alleen de niet laatste date
Dit kan niet, omdat er soms geen niet-laatste-date is, en soms (bij num 1) zijn er 2.

Uit alle codevoorbeelden die je geeft lees ik duidelijk dat je het concept group by simpelweg niet snapt en er geen tutorial of boek over hebt gelezen. Nu helpt MySQL daar niet echt bij door een brakke k*t-database te zijn die foute queries met group by gewoon slikt en onzin uitpoept, maar alleen de afgelopen week kan ik al zo 2 topics wijzen met hetzelfde probleem:
[rml][ SQL] 1002 EDT NGC Not a GROUP BY colum[/rml]
[rml][ SQL] max()[/rml]

Dus ook voor jou geldt: www.sqlcourse.com en www.sqlcourse2.com doet wonderen, beide links staan in de FAQ.

Professionele website nodig?


Dit topic is gesloten.