Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  MySQL, group by ja having märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
Peebuste
HV vaatleja

liitunud: 01.09.2007




sõnum 05.03.2009 20:09:33 MySQL, group by ja having vasta tsitaadiga

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 icon_sad.gif
Mida krt ma valesti teen??
Kommentaarid: 1 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 1
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 05.03.2009 20:19:16 vasta tsitaadiga

sql:
  1. SELECT
  2. t.n,
  3. t.m
  4. FROM
  5. (
  6.         SELECT
  7.         t2.n,
  8.         t2.m
  9.         FROM
  10.         tabel AS t2
  11.         ORDER BY
  12.         t2.m DESC
  13. ) AS t
  14. GROUP BY
  15. t.n
  16. ORDER BY
  17. 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
vaata kasutaja infot saada privaatsõnum
Peebuste
HV vaatleja

liitunud: 01.09.2007




sõnum 05.03.2009 20:27:59 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 05.03.2009 20:37:41 vasta tsitaadiga

sql:
  1. SELECT
  2. t.n,
  3. MAX(t.m) AS m
  4. FROM
  5. tabel AS t
  6. GROUP BY
  7. t.n
  8. ORDER BY
  9. 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
vaata kasutaja infot saada privaatsõnum
Renka
HV Guru
Renka

liitunud: 01.04.2002




sõnum 05.03.2009 20:37:59 vasta tsitaadiga

sql:
  1. SELECT
  2.   DISTINCT *
  3. FROM
  4.   tabel
  5. WHERE
  6.   M=MAX(M)

_________________
There is no place like 127.0.0.1
Kommentaarid: 71 loe/lisa Kasutajad arvavad:  :: 2 :: 1 :: 61
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 05.03.2009 20:40:04 vasta tsitaadiga

Renka kirjutas:
sql:
  1. SELECT
  2.   DISTINCT *
  3. FROM
  4.   tabel
  5. WHERE
  6.   M=MAX(M)
1111 - Invalid use of group function
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
Renka
HV Guru
Renka

liitunud: 01.04.2002




sõnum 05.03.2009 20:45:36 vasta tsitaadiga

Ni oli vist õige. Ei saa ise katsetada hetkel.
sql:
  1. SELECT
  2.   DISTINCT(*)
  3. FROM
  4.   tabel
  5. WHERE
  6.   M=MAX(M)

_________________
There is no place like 127.0.0.1
Kommentaarid: 71 loe/lisa Kasutajad arvavad:  :: 2 :: 1 :: 61
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 05.03.2009 20:48:06 vasta tsitaadiga

Renka kirjutas:
Ni oli vist õige. Ei saa ise katsetada hetkel.
sql:
  1. SELECT
  2.   DISTINCT(*)
  3. FROM
  4.   tabel
  5. WHERE
  6.   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
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 05.03.2009 20:49:31 vasta tsitaadiga

a milles kühvel?
SELECT N, MAX(M) FROM tabel GROUP BY N
Kommentaarid: 50 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 47
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 05.03.2009 20:53:24 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
Peebuste
HV vaatleja

liitunud: 01.09.2007




sõnum 05.03.2009 20:54:24 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
DoS
HV veteran
DoS

liitunud: 19.08.2002




sõnum 05.03.2009 21:15:42 vasta tsitaadiga

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
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  MySQL, group by ja having
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
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



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.