Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
Peebuste
HV vaatleja
liitunud: 01.09.2007
|
05.03.2009 20:09:33
MySQL, group by ja having |
|
|
Tabel:
N M
----+----
aaa | 221
bbb | 222
mmm | 223
aaa | 224
mmm | 225
bbb | 226
jjj | 227
mmm | 228
aaa | 229 |
Tahaks saada veeru N unikaalseid väärtusi, kus M on kõige suurem
SELECT * FROM tabel
GROUP BY N
HAVING M=MAX(M)
Aga vaat vastuseid ei tule
Mida krt ma valesti teen??
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
05.03.2009 20:19:16
|
|
|
sql:
|
SELECT t.n, t.m FROM ( SELECT t2.n, t2.m FROM tabel AS t2 ORDER BY t2.m DESC ) AS t GROUP BY t.n ORDER BY t.n ASC
|
Minu esmane lahendusidee, ei pruugi parim olla, aga peaks toimima.
HAVING käsk on mõeldud grupeeritud tulemuste välja filtreerimiseks, mis rakendub alles peale grupeerimist, WHERE rakendub enne grupeerimist.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Peebuste
HV vaatleja
liitunud: 01.09.2007
|
05.03.2009 20:27:59
|
|
|
See ei pruugi pädev olla. Muarust pole kuskil öeldud, se GROUP BY võtab just 1. sobiva rea. Seega sorteerimisega alampäring võib meid kohale viia, aga ei pruugi?
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
05.03.2009 20:37:41
|
|
|
sql:
|
SELECT t.n, MAX(t.m) AS m FROM tabel AS t GROUP BY t.n ORDER BY m ASC
|
viimati muutis mikk36 05.03.2009 20:38:17, muudetud 1 kord |
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Renka
HV Guru

liitunud: 01.04.2002
|
05.03.2009 20:37:59
|
|
|
sql:
|
SELECT DISTINCT * FROM tabel WHERE M=MAX(M)
|
_________________ There is no place like 127.0.0.1 |
|
Kommentaarid: 71 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
1 :: |
61 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
05.03.2009 20:40:04
|
|
|
Renka kirjutas: |
sql:
|
SELECT DISTINCT * FROM tabel WHERE M=MAX(M)
|
|
1111 - Invalid use of group function
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Renka
HV Guru

liitunud: 01.04.2002
|
05.03.2009 20:45:36
|
|
|
Ni oli vist õige. Ei saa ise katsetada hetkel.
sql:
|
SELECT DISTINCT(*) FROM tabel WHERE M=MAX(M)
|
_________________ There is no place like 127.0.0.1 |
|
Kommentaarid: 71 loe/lisa |
Kasutajad arvavad: |
   |
:: |
2 :: |
1 :: |
61 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
05.03.2009 20:48:06
|
|
|
Renka kirjutas: |
Ni oli vist õige. Ei saa ise katsetada hetkel.
sql:
|
SELECT DISTINCT(*) FROM tabel WHERE M=MAX(M)
|
|
Distinctiga pole probleemi, error kaob kui ära võtta see WHERE käsklus.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
DoS
HV veteran

liitunud: 19.08.2002
|
05.03.2009 20:49:31
|
|
|
a milles kühvel?
SELECT N, MAX(M) FROM tabel GROUP BY N
|
|
Kommentaarid: 50 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
47 |
|
tagasi üles |
|
 |
mikk36
HV Guru

liitunud: 21.02.2004
|
05.03.2009 20:53:24
|
|
|
DoS kirjutas: |
a milles kühvel?
SELECT N, MAX(M) FROM tabel GROUP BY N |
Kühvlit polegi, sinuga sama lahenduse pakkusin juba varem välja.
|
|
Kommentaarid: 85 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
2 :: |
78 |
|
tagasi üles |
|
 |
Peebuste
HV vaatleja
liitunud: 01.09.2007
|
05.03.2009 20:54:24
|
|
|
Ma pingutasin lihtsustamisega üle. Veerge on ikka rohkem. Näiteks:
N S R M
----+-----+-----+----
aaa | 987 | 123 | 221
bbb | 67u | 234 | 222
mmm | poi | 345 | 223
aaa | vcx | 456 | 224
mmm | 0l9 | 678 | 225
bbb | fds | 567 | 226
jjj | tre | 768 | 227
mmm | kjh | 107 | 228
aaa | jhg | 937 | 229 |
Muu jutt sama
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
DoS
HV veteran

liitunud: 19.08.2002
|
05.03.2009 21:15:42
|
|
|
aga äkki töötab siis siis
SELECT t.N, t.S, t.R, t.M FROM sinutabel t, (SELECT max(M) as maxM, N FROM sinutabel GROUP BY N) r WHERE t.N = r.N AND t.M= r.maxM
|
|
Kommentaarid: 50 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
47 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|