Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Abfrage absteigend Sortieren nach häufigkeit der Datensätze

  1. #1
    Registrierter Benutzer
    Registriert seit
    14.02.2005
    Beiträge
    33

    Abfrage absteigend Sortieren nach häufigkeit der Datensätze

    Hi !

    Ich habe das Problem das ich eine Tabelle in welcher ca 19000 Datensätze stehen nach der häufigkeit eines bestimmten Feldes sortieren möchte.

    Das Feld FKT (Funktion des Ansprechpartners) besitzt in der Tabelle mehrfach vorkommende Ausprägungen die ich zusammenfassen möchte und dann nach der Häufigkeit des vorkommens sortieren möchte. Ich zeige das hier mal kurz an einem Beispiel:

    Name FKT
    --------------------------------
    Mark Geschäftsführer
    Dennis AZUBI
    Mary Sängerin
    Alex Transe
    Heino AZUBI
    Elisabeth WC-Frau
    Heike AZUBI
    Ciara Sängerin


    Das Ergebnis sollte dann wie folgt aussehen:

    AZUBI
    Sängerin
    Transe
    Geschäftsführer


    --> AZUBI kommt am häufigsten vor und sollte deshalb oben stehen, dann kommt die Sängerin usw....

    Kann mir da jemand helfen ???
    Mit group by bekomme ich zwar die doppelten weg, aber ich weiß nicht wie ich die dann absteigend nach häufigkeit sortiere.

  2. #2
    Registrierter Benutzer
    Registriert seit
    21.06.1999
    Beiträge
    677
    Lösungsweg: zunächst die Anzahlen mittels COUNT und GROUP BY selektieren, dann auf diesem Ergbenis mittels WHERE cnt=(SELECT MAX ...) die höchsten Einträge selektieren (geht auch mit ORDER BY und LIMIT).

    Das alles geht auch in einem einzigen Statement, wenn Du Tabellenkonstruktoren verwendest, z.B.
    Code:
    select * from (SELECT ... ) x where ...
    Das großgeschriebene Select ist der Tabellenkonstruktor.

  3. #3
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    etwa so:
    select fkt from
    (select count(fkt),fkt from tabelle
    group by fkt
    order by count desc) x;

    ps: in deinem Ergebnis fehlt die KloFrau ;-)
    Das Ziel ist das Ziel.

  4. #4
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    377
    Verschachtelte SQL-Abfragen sollte man mit Vorsicht geniessen, die schlagen bei einigen Datenbanken schwer auf die performence und sind nicht ueberall anwendbar!
    Amilo D - 2,8 Ghz - ATI Radeon 9000
    Debian GNU/Linux 3.1 (Sarge)

  5. #5
    Registrierter Benutzer
    Registriert seit
    24.12.2001
    Ort
    anywhere before EOF
    Beiträge
    236
    Hmm, kann es gerade nicht ausprobieren, kann auch voelliger Bloedsinn sein, aber geht ein SELECT COUNT(*), fkt FROM table GROUP BY fkt ORDER BY 1; nicht?
    Oder motzt er da?
    chmod -R +t /*

  6. #6
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Zitat Zitat von sticky bit
    Hmm, kann es gerade nicht ausprobieren, kann auch voelliger Bloedsinn sein, aber geht ein SELECT COUNT(*), fkt FROM table GROUP BY fkt ORDER BY 1; nicht?
    Oder motzt er da?
    wow, das geht ja (kannte ich so noch nicht). Liefert allerdings mehr zurück als er haben will.

    @nul: Was wäre denn die Alternative?
    Das Ziel ist das Ziel.

  7. #7
    Registrierter Benutzer
    Registriert seit
    24.12.2001
    Ort
    anywhere before EOF
    Beiträge
    236
    Zitat Zitat von mwanaheri
    Liefert allerdings mehr zurück als er haben will.
    Hmm, wenn das geht, dann geht SELECT fkt FROM table GROUP BY fkt ORDER BY COUNT(*); wahrscheinlich auch? Dann hat man die Zählerspalte nicht in der Ausgabemenge...
    chmod -R +t /*

  8. #8
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Yo, also hier bei Postgres klappt das.
    Allerdings habe ich es umformuliert:
    select fkt from tabelle group by fkt order by count(fkt) desc;

    Hübsch und klein, das muss ich sagen.
    Allerdings sollte man glaube ich aufpassen, dass man nicht so kurzt formuliert, dass man später nicht mehr begreift, was man da gemacht hat.
    Ein explain beider Varianten ergab bei mir keinen Unterschied in den Kosten.
    Das Ziel ist das Ziel.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •