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 |
|
 |
|