Toon posts:

[mysql] group by

Pagina: 1
Acties:

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
        SELECT 
                wonr.id,
                wonr.name,
            wonr.mod
        FROM
                wonr
        GROUP BY
            wonr.name
        ORDER BY 
            wonr.name, wonr.mod


Opzich werkt deze query. Alleen wil ik als wonr.mod niet null is, maar wonr.name wel gelijk is, hij deze toch select en dan group by op wonr.mod doet. Ik heb alleen geen idee hoe?

Iemand een tip?

  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Ik heb niet door wat je bedoeld, kan je me iets meer info geven?
Om wat voor gegevens het bijvoorbeeld gaat en wat je er mee wilt doen?
Misschien kan je namelijk hetzelfde wel bereiken op een andere manier.

groetjes

Pascal


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 snapt er werkelijk niets van.. Kan je een datavoorbeeld geven?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 08:37

Freee!!

Trotse papa van Toon en Len!

Gebruik 'GROUP BY' alleen als je wilt aggregeren (SUM, TOTAL, MIN, MAX, AVG). Dit moet je oplossen in de 'WHERE' clausule (WHERE wonr.mod NOT IS NULL).

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Verwijderd

"where wonr.mod is not null" ?

group by wijzigen ?
Leg eens uit wat je wil (en probeer het niet in "SQL" uit te leggen !)

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 08:37

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op 14 August 2003 @ 14:00:
"where wonr.mod is not null" ?

group by wijzigen ?
Leg eens uit wat je wil (en probeer het niet in "SQL" uit te leggen !)
'GROUP BY' hier gewoon helemaal niet gebruiken, niet nodig / fout (geen functie gebruikt die het nodig heeft) en als je de zaak gewoon netjes op volgorde wilt hebben is die 'ORDER BY' wel voldoende.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 21-08 21:12
Je vraag is niet echt duidelijk idd, maar als je zegt dat die query die je hebt al goed is: waarom dan niet een UNION gebruiken om het andere deel er nog bij te voegen?

dus iets als:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT 
   won.id,
   wonr.name,
   wonr.mod
FROM
   wonr
GROUP BY
   wonr.name
ORDER BY 
   wonr.name, wonr.mod

UNION

SELECT 
   won.id,
   wonr.name,
   wonr.mod
FROM
   wonr
WHERE 
   wonr.mod <> NULL
GROUP BY 
   wonr.mod


Nogmaals: slechts een suggestie aangezien ik ook niet precies begrijp wat je nu bedoeld... misschien heb je er wat aan...

Verwijderd

Mr. Liu schreef op 14 augustus 2003 @ 14:02:
[...]

'GROUP BY' hier gewoon helemaal niet gebruiken, niet nodig / fout (geen functie gebruikt die het nodig heeft) en als je de zaak gewoon netjes op volgorde wilt hebben is die 'ORDER BY' wel voldoende.
Helemaal mee eens.

offtopic:
Mijn reply schreef ik voordat ik die van jou zag...

[ Voor 6% gewijzigd door Verwijderd op 14-08-2003 14:04 ]


Verwijderd

Topicstarter
Uhm sorry als het wat onduidelijk is.... ik heb een tabel waarin name meerdere keren voorkomt, deze wil ik dus maar 1x selecteren..... maar soms is mod niet null en dan wil ik dat ook al komt name vaker voor, de name met mod wel word geselecteerd.

Tabel bevat bv dit:
code:
1
2
3
4
5
6
7
8
name    mod

test    NULL
test    NULL
test    woei
test    woei
test2   NULL
test2   NULL

Als ik nu mijn select doe krijg ik dit:
code:
1
2
3
4
name    mod

test    NULL
test2   NULL

Maar ik wil dit:
code:
1
2
3
4
name    mod
test    NULL
test    woei
test2   NULL


Hopenlijk ben ik nu duidelijker....

[ Voor 35% gewijzigd door Verwijderd op 14-08-2003 14:20 ]


  • Freee!!
  • Registratie: December 2002
  • Laatst online: 08:37

Freee!!

Trotse papa van Toon en Len!

Verwijderd schreef op 14 August 2003 @ 14:13:
Uhm sorry als het wat onduidelijk is.... ik heb een tabel waarin name meerdere keren voorkomt, deze wil ik dus maar 1x selecteren..... maar soms is mod niet null en dan wil ik dat ook al komt name vaker voor, de name met mod wel word geselecteerd.

Hopenlijk ben ik nu duidelijker....
Ik geloof dat ik het begrijp. Probeer eens jouw statement, aangevuld met een 'WHERE mod IS NULL' en dan een UNION met mijn statement. Als ik je goed begrepen heb, moet dat werken. Mogelijk krijg je nog wat problemen met de 'ORDER BY', maar dat is van later zorg.

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 21-08 21:12
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
SELECT DISTINCT
   w.id,
   w.name,
   w.mod
FROM
   wonr AS w
WHERE 
   w.mod IS NULL
ORDER BY 
   w.name, w.mod

UNION 

SELECT DISTINCT
   w2.id,
   w2.name,
   w2.mod
FROM 
  wonr AS w2
WHERE 
  w2.mod <> NULL 
ORDER BY 
   w2.name, w2.mod


Moet je wel verder helpen denk ik, weet niet of anderen dit een goede / nette oplossing vinden maar daar komen we vanzelf wel achter denk ik :)

edit:
Ik weet alleen niet hoe die UNION omgaat met je sortering maar dat moet je zelf maar ff bekijken

[ Voor 20% gewijzigd door jsiegmund op 14-08-2003 14:22 . Reden: typo ]


  • paulh
  • Registratie: Juli 1999
  • Laatst online: 22-06 15:30
Dat maakt volgens mij niet uit want de order by moet over het gehele union resultaat.

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 21-08 21:12
Waarom gebruik je dan niet DISTINCT? Dat werkt toch gewoon? Check de manual!

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 08:37

Freee!!

Trotse papa van Toon en Len!

iCe01 schreef op 14 augustus 2003 @ 14:30:
[...]
Waarom gebruik je dan niet DISTINCT? Dat werkt toch gewoon? Check de manual!
* Freee!! voelt zich een beetje heel erg :? 8)7 |:( :? 8)7 |:(

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


Verwijderd

Topicstarter
iCe01 schreef op 14 August 2003 @ 14:30:
[...]


Waarom gebruik je dan niet DISTINCT? Dat werkt toch gewoon? Check de manual!
Hoe :? Als ik distinct er voor zet dan krijg ik gewoon de volledige tabel? Ik zal eens in de manual duiken... moment...

Verwijderd

Topicstarter
met
code:
1
2
3
4
5
6
7
8
        SELECT distinct
                wonr.id,
                wonr.name,
            wonr.mod
        FROM
                wonr
        ORDER BY 
            wonr.name, wonr.mod

Krijg ik gewoon
code:
1
2
3
4
5
6
7
8
name    mod

test    NULL
test    NULL
test    woei
test    woei
test2   NULL
test2   NULL

terug?

/edit:
Ik snap al, id is natuurlijk uniek....

[ Voor 14% gewijzigd door Verwijderd op 14-08-2003 14:54 ]


  • jsiegmund
  • Registratie: Januari 2002
  • Laatst online: 21-08 21:12
uhmmm ok sorry redelijk domme opmerking inderdaad, had die ID ff over het hoofd gezien :S

  • Freee!!
  • Registratie: December 2002
  • Laatst online: 08:37

Freee!!

Trotse papa van Toon en Len!

iCe01 schreef op 14 August 2003 @ 15:09:
uhmmm ok sorry redelijk domme opmerking inderdaad, had die ID ff over het hoofd gezien :S
Je bent niet de enige :(

The problem with common sense is that sense never ain't common - From the notebooks of Lazarus Long

GoT voor Behoud der Nederlandschen Taal [GvBdNT


  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

begrijp ik je nu verkeerd of bedoel je gewoon dit?
SQL:
1
2
3
4
SELECT wonr.id, wonr.name, wonr.mod
FROM wonr
GROUP BY wonr.name, wonr.mod
ORDER BY wonr.name, wonr.mod


offtopic:
Overigens blijf ik die wonr.id kolom in de SELECT vreemd vinden

Today's subliminal thought is:


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Als die mod+name een unieke combinatie moet representeren, dan kan je maar beter dat afdwingen (middels een unique-index op die twee samen) en alle foute records verwijderen.
En in dat geval kan je gewoon dit doen:
select wonr.id, wonr.name, wonr.mod from wonr order by wonr.name, wonr.mod

Als je gewoon wilt weten welke mod+name-combo's er zijn, dan heeft het geen zin de "id" erbij te zoeken, want die is totaal irrelevant dan. En in dat geval kan je dit doen:
select distinct wonr.name, wonr.mod from wonr order by wonr.name, wonr.mod
Pagina: 1