AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL group by jedoch nur 10 records pro Gruppe
Thema durchsuchen
Ansicht
Themen-Optionen

SQL group by jedoch nur 10 records pro Gruppe

Ein Thema von Kostas · begonnen am 6. Jan 2024 · letzter Beitrag vom 7. Jan 2024
 
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
697 Beiträge
 
FreePascal / Lazarus
 
#5

AW: SQL group by jedoch nur 10 records pro Gruppe

  Alt 7. Jan 2024, 07:40
die erweiterung die Firebird da kann sind auf jeden Fall ein Weg, wie man das umsetzen
kann, ist aber nicht immer intuitiv für alte säcke (wie mich) zu verstehen, daher geht das
wenn ich das richtig verstanden hab auch so (beispiel auf basis der ibexpert demodb db1)

Code:
select CATEGORY.TXT,
       (select sum(X_PRICE)
        from (select first 10 X_PRODUCT.PRICE X_PRICE
              from PRODUCT X_PRODUCT
              where X_PRODUCT.CATEGORY_ID = CATEGORY.ID
              order by PRICE desc))
from category
wie komm ich da drauf?

1. im inneren select willst du immer nur die 10 höchsten records haben

Code:
select first 10 X_PRODUCT.PRICE X_PRICE
              from PRODUCT X_PRODUCT
              order by X_PRODUCT.PRICE desc
eine alias benutze ich da schon damit diese eben dann später mit den äußeren selects nix durcheinander kommt

2. du brauchst die gruppierte summe der 10 records also ermittelst du nur die summe zur gruppe, die kommt dann gleich von einem noch drumherum liegenden äußeren select

Code:
select sum(X_PRICE)
from (select first 10 X_PRODUCT.PRICE X_PRICE
              from PRODUCT X_PRODUCT
              where X_PRODUCT.CATEGORY_ID = CATEGORY.ID
              order by PRICE desc))
3. und das jeweils zeilenweise als spaltenwert ermitteln für jede gruppe

Code:
select CATEGORY.TXT,
       (select sum(X_PRICE)
        from (select first 10 X_PRODUCT.PRICE X_PRICE
              from PRODUCT X_PRODUCT
              where X_PRODUCT.CATEGORY_ID = CATEGORY.ID
              order by PRICE desc))
from category

fazit: subselects sind wenn indiziert zugegriffen wird, auch schon sehr hilfreich, es ginge auch per execute block mit zwischenvariablen
aber ganz wichtig: das was ich da oft bei kunden sehe sind subselects auf prozeduren und damit nie indiziert, es sei denn die sp ist dafür
schon brauchbar definiert, das wird dann oft extrem performancekritisch. Oder ganz einfach: wenn so ein SQL dann bei euch sehr lang braucht
liegt das nicht an Firebird, sondern an eurer mieserablen Implementation, an der man aber immer was optimieren kann, ohne gleich alles
über den haufen zu werfen.
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
Firebird 5 Update und Know-how Workshop – 28.8.-29.08.2025 64546 Mörfelden - Walldorf
  Mit Zitat antworten Zitat
 


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 23:40 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