Announcement

Collapse
No announcement yet.

Frühzeitiges Abbrechen einer COUNT(DISTNCT... Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Frühzeitiges Abbrechen einer COUNT(DISTNCT... Abfrage

    Hallo,

    ich habe das Problem, dass ich ich auf jede Spalte eine COUNT(DISTNCT(...
    Abfrage machen will. Jedoch interessiert es mich nicht ob es jetzt 1001 oder 10000000000 verschiedene Werte in einer Spalte sind. Jedoch hätte ich schon gerne für die unter 1000 ein genaues Ergebnis.
    Deshalb ist meine Frage, ob man eine COUNT(DISTINCT(*)) Anfrage bis zu einem bestimmten wert laufen lassen kann und dann irgendwie abbrechen kann. Mit einem LIMIT ist dies ja leider nicht möglich..

    Hat jemand denn dafür eine "schnelle Lösung".
    Weil anfragen wieviele es sind und wenn es mehr als 1000 sind einfach 1000 zurückzugeben ist nicht was ich will!

  • #2
    Nein. Das ist schon aufgrund der Natur der Abfrage nicht möglich. Um überhaupt einen distinct machen zu können, muss die DB erstmal den ganzen Datenbestand sortieren. Das ist die Aktion, die am meisten Aufwand macht. Das Zählen der sortierten und eingedampften Werte ist dann nur noch Formsache.

    Dim
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      ok.. das hab ich mir leider auch schon gedacht...
      aber ich hatte gehofft dass es eine Möglichkeit gibt die "sortierung" abzubrechen... wobei man je nach Sortierungsalgorithmus auch nie genau weiß wieviele unterschiedliche Elemente man bereits gefunden hat.

      Comment


      • #4
        Hallo,

        vielleicht hilft Dir der Beispiel-Ansatz weiter, damit Du gar nicht abbrechen musst:

        create table meine_tabelle( hugo char(10), martha char(10));

        select count(*) as anzahl, hugo as spalteninhalt, 'hugo' as spaltenname
        from meine tabelle group by hugo having count(*) > 1000
        union
        select count(*) as anzahl, martha as spalteninhalt, 'martha' as spaltenname
        from meine tabelle group by martha having count(*) > 1000;

        Gruß
        Uschi

        Comment

        Working...
        X