AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Ergebnismenge beschränken mit "LIMIT" oder "TOP"
Thema durchsuchen
Ansicht
Themen-Optionen

Ergebnismenge beschränken mit "LIMIT" oder "TOP"

Ein Thema von Der schöne Günther · begonnen am 19. Feb 2018 · letzter Beitrag vom 22. Feb 2018
Antwort Antwort
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 13:13
Moin Günther,

oder Du fragst mit Hilfe von COUNT direkt die Gesamtzahl der Ergebnisse ab.
Dann muss er aber gruppieren, was evtl nicht erwünscht ist.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 13:20
Oder vorher
Markus Kinzler
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.598 Beiträge
 
Delphi 7 Professional
 
#3

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 14:10
Moin Günther,

oder Du fragst mit Hilfe von COUNT direkt die Gesamtzahl der Ergebnisse ab.
Dann muss er aber gruppieren, was evtl nicht erwünscht ist.
Seit wann muss man bei Count gruppieren?

Select top 100 * from tabelle where irgendwas
Select count(*) As Anzahl from tabelle where irgendwas

Select * from tabelle where irgendwas limit 100
Select count(*) As Anzahl from tabelle where irgendwas

Select * from tabelle where irgendwas and rownum <= 100
Select count(*) As Anzahl from tabelle where irgendwas

Select first 100 * from tabelle where irgendwas
Select count(*) As Anzahl from tabelle where irgendwas

Gruppieren muss man nur, wenn man mehr als die Anzahl zurückbekommen will, bzw. wissen will, wie oft bestimmte Werte vorkommen.

Das ist aber was vollkommen anderes, als eine Einschränkung per Top, Limit, First, Rownum und das Zählen der Sätze, die ggfls. insgesamt geliefert werden könnten.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 14:29
Seit wann muss man bei Count gruppieren?

Select top 100 * from tabelle where irgendwas
[...]

Gruppieren muss man nur, wenn man mehr als die Anzahl zurückbekommen will, bzw. wissen will, wie oft bestimmte Werte vorkommen.
Ja super.
Das Problem ist nicht mit einer zweiten Abfrage die wirkliche Anzahl an Datensätzen festzustellen sondern in einer Query 100 Datensätze zu selektieren und anhand DIESES Ergebnisses ableiten zu können ob es noch mehr Daten gibt oder nicht. Und das geht mit Count nur wenn man gruppiert oder das Count (wie ich vorgeschlagen habe) in ein Subselect verlagert.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#5

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 15:00
.. sondern in einer Query 100 Datensätze zu selektieren und anhand DIESES Ergebnisses ableiten zu können ob es noch mehr Daten gibt oder nicht. Und das geht mit Count nur wenn man gruppiert ..
Ja, das wäre die Ecke, die ich meinte. Sowas zu machen ist nicht das Problem, code seitig. Die Frage ist, wieviel Ressourcen es kostet.

Und meine Vermutung wäre:
Wenn man bereits eine Komponente einsetzt, die nachladen kann, wäre das vielleicht schonender, als die eine Variante mit Limit plus extra Count und oder Group.
Gruß, Jo
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.598 Beiträge
 
Delphi 7 Professional
 
#6

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 15:05
Seit wann muss man bei Count gruppieren?

Select top 100 * from tabelle where irgendwas
[...]

Gruppieren muss man nur, wenn man mehr als die Anzahl zurückbekommen will, bzw. wissen will, wie oft bestimmte Werte vorkommen.
Ja super.
Das Problem ist nicht mit einer zweiten Abfrage die wirkliche Anzahl an Datensätzen festzustellen sondern in einer Query 100 Datensätze zu selektieren und anhand DIESES Ergebnisses ableiten zu können ob es noch mehr Daten gibt oder nicht. Und das geht mit Count nur wenn man gruppiert oder das Count (wie ich vorgeschlagen habe) in ein Subselect verlagert.
Tut mir leid, das verstehe ich nicht, könntest Du das bitte mit einem Beispiel erläutern?

select top 100 * from tabelle where bedingung Kann maximal 100 Sätze liefern.

select Count(*) from tabelle where bedingung liefert die Gesamtzahl der Sätze zur Bedingung.

Ist diese Zahl > 100, so weiß ich, dass ich mit mehr als 100 Sätzen rechnen muss und kann zum ersten Statement einen entsprechenden Hinweis ausgeben, der besagt, dass es zu den 100 Sätzen noch weitere Zahl - 100 Sätze gibt.

Ein Subselect oder eine Gruppierung erscheinen mir nicht erforderlich.

Wo liegt mein Denkfehler?

Die Ursprungsfrage war doch: Wenn ich per Top 100 die Menge einschränke, wie kann ich erfahren, ob es mehr, weniger oder genau 100 Sätze gibt?

Weniger ist klar: Kommt bei Top 100 weniger als 100 heraus, gibt es weniger als 100. Kommen 100 Sätze heraus, so gibt es mindestens 100 Sätze. Das Mehr kann bei 0 bis n liegen.

Mit einem Subselect muss man nur dann arbeiten, wenn man bei der Ermittlung der weiteren, möglichen Ergebnismenge, die bereits erhaltene explizit ausklammern will. Für die Feststellung der Größe einer möglichen Ergebnismenge erscheint mir das nicht erforderlich. Gesamtmenge (Count(*)) minus bereits erhaltener Menge (top 100) = Restmenge.

Anhand einer Datenmenge von select top 100 * from tabelle where bedingung kann ich nicht feststellen, ob es mehr, als die ausgewählte Datenmenge, gibt. Auch durch Count mit oder ohne Gruppierung nicht, ich werde immer mindestens eine weitere Abfrage benötigen.

Oder möchtest Du darauf hinaus, dass das Count quasi schon eine Teilmenge des Ergebnisses ist? Also grob sowas in der Art:

select top 100 *, GesamtanzahlDesMöglichenErgebnisses from tabelle where bedingung
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 16:13
Oder möchtest Du darauf hinaus, dass das Count quasi schon eine Teilmenge des Ergebnisses ist? Also grob sowas in der Art:

select top 100 *, GesamtanzahlDesMöglichenErgebnisses from tabelle where bedingung
Genau das.
Code:
select top 100 
   *,
   (select count(*) from tabelle where bedingung) as alle
from tabelle where bedingung
Dass es in 2 Abfragen machbar ist, ist klar. Aber Der schöne Günther hat ja nach einer Möglichkeit gefragt wie er es mit einer Abfrage erkennen/lösen kann.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 21:06
Mir ist die Aufgabenstellung nicht so ganz klar. Irgendwie klingt das nach ich hab nur 100 EUR aber vielleicht gebe ich noch mehr aus.
So zu denken ist für Menschen ganz normal, die meisten Programm sind nicht so indifferent.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.212 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Ergebnismenge beschränken mit "LIMIT" oder "TOP"

  Alt 19. Feb 2018, 21:23
Vielen Dank erst einmal für all die Antworten, das ist alles sehr hilfreich!

Mir ist die Aufgabenstellung nicht so ganz klar.
Ich denke die Aufgabenstellung ist ziemlich klar: Eine Query liefert u.U. viele Treffer. Es macht keinen Sinn alle abzuholen und zu verarbeiten. Ich möchte zuverlässig wissen ob das Ergebnis zufällig genau 100 Elemente enthält oder mehr.

Wenn dem Benutzer die 100 Treffer nicht reichen muss er genauer suchen
Mehr will ich gar nicht. Das ist ja auch nichts ungewöhnliches, so etwas sieht man ja überall.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz