MySQL: Finne mest forekommende verdi i felt

I sammenhengen med de nye DVD-listene jeg har lagt ut lagde jeg noe statistikk for moro skyld. Der fant jeg ut at jeg ville finne ut hvilken sjanger jeg ser mest av, og eier mest av. Derfor måtte jeg finne den verdien som forekommer oftest i et felt.

Jeg tenkte det kunne være litt kjekt å fått denne servert i fanget, da den kan komme til nyttighet for noen senere. Dette er nesten samme som da jeg skulle finne motsatte av destinkte verdier.

Så den jeg lagde, ble noe slik som den her:

  1. SELECT COUNT( id ) AS quantity, field_name
  2. FROM table
  3. GROUP BY field_name
  4. ORDER BY quantity DESC
  5. LIMIT 1

Så her er FIELD feltet som du teller opp i, og id er unike id til tabellen. Her vil du få noe resultat som dette:

quantity - field
1233      - value

Håper dere finner den nyttig.

PS/Tips: Om dere vil ha full statistikk over forskjellige verdier og hvor mange det forekommer av de. Kan være kjekt for statistikk-applikasjoner for å telle forskjellige besøk av forskjellige IP-adresser.

8 responser om “MySQL: Finne mest forekommende verdi i felt”

  1. Flott informasjon jeg fikk bruk for i min "kopi" av sette-filmer :)


  2. Flott!
    Da vil du kanskje rekne ut gjennomsnitt også? I alle fall, du kan gjøre noe slik - med simpel matte:

    1. SELECT
    2. (SUM(fieldName)/COUNT(id)) AS avrage_foo
    3. FROM table


  3. Skal nok få ordnet det også. Men det med sjangere er litt vrien, da flere filmer passer like godt i flere sjangre.. så filmer som blant annet har thriller, blir ikke med på tellingen. Får se hva jeg gjør med det.


  4. Nei da. Den er ikke noe vrien. Den er vrien med MySQL, men ikke om du tyr til med PHP. Satte å tenkte over en løsning i MySQL nå, men tror ikke det er noen god løsning på det.

    Så bare bruk PHP, hent ut alle sjangere, og bruk strpos til å sjekke om det er / i verdien, eller noe lignende. Så kan du bare bruke COUNT($array_from_explode) om det finnes / i den, den kan du legge til resten. Er ikke værre. Bruk array bare.

    Om du trenger hjelp kan jeg lage en løsning til deg.


  5. Gjerne. Jeg skjønner logikken, men kun i teori, ikke i praksis. Så all hjelp mottas med takk :)


  6. [...] Dette er en PHP-funksjon til å hjelpe Audun Sæther med, som hvor du kan lese problemstillingen under kommentarene på forrige post. For å summere opp hva den gjør: [...]


  7. Så her er løsningen din:
    http://mikaelb.net/2007/telle-flere-sjangrer-i-hvert-felt/


  8. Så vidt jeg vet blir både felt og * som argument i COUNT omgjort til 1 helt i starten av sekvensen, så det ikke vil bli noe særlig til tidstap.

    Når det gjelder valg av å ha id i COUNT er for jeg liker å være konsekvent med å velge *hva* jeg skal telle.


Legg igjen respons

Fyll ut alle felt markert med *

Brukerinformasjon
  1. Kan bruke følgende html: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> og [html] [css], [mysql] og [php] Hold posten ren og fin!

    Siter valgt tekst

E-post-varsel uten å skrive kommentar.

Info om posten

Innlegget ble postet 31.01.07 00:19 og ligger under kategorien PHP / MySQL. Du kan abonnere på kommentarene ved å bruke RSS 2.0 feed. Du kan legge til kommenter, eller trackback fra din blogg/side.

Resurser

Arkiver

Metainfo


Siste Flickr-bilder

  • Commentsystem (20070308)
  • Ukraina Aksjonen 2006 (20070306)
  • Mikael Brevik blogg (20070306)
  • Mikael Brevik (20070306)
  • Brukerdefinert side - AVIS2 (20070306)
  • Brevik Webutvikling (20070306)
  • skyscraper
  • visittkort