Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird SQL und Runden bei Count (https://www.delphipraxis.net/43323-firebird-sql-und-runden-bei-count.html)

buyden 1. Apr 2005 17:24

Datenbank: Firebird • Version: 1.5 • Zugriff über: ZEOS

Firebird SQL und Runden bei Count
 
Hi,

ich möchte die durchschnittliche Anzahl von bearbeiteten aufträgen pro Tag aus meiner DB anzeigen lassen.
Dafür habe ich folgendes Query:
Delphi-Quellcode:
with frmdata.qustat3 do
    begin
      close;
      sql.Clear;
      sql.add('SELECT count(nummer)/count(distinct eingangsdatum) FROM auftrag;');
      open;
    end;
es sollte also bei 120 Tagen und 451 aufträgen irgendwas mit 3,75... rauskommen. leider bekomm ich nur ein gerundetes ergebnis, vermutlich weil das ganze nur ein integer-wert ist.
Wie kann man denn da abhilfe schaffen, ich bräuchte das ergebnis auf 2-3 Kommastellen genau.

Die Muhkuh 1. Apr 2005 17:39

Re: Firebird SQL und Runden bei Count
 
Könntest es ein bisschen umständlicher machen.

Du holst den Count und das Eingangsdatum und speicherst es in einer Variable und teilst nun das ganze. Per FloatToStrF kannst du das ganze nun auf 2-3 Kommastellen angeben

buyden 1. Apr 2005 17:41

Re: Firebird SQL und Runden bei Count
 
Das muss doch auch irgendwie direkt in der abfrage gehen, wäre sicher ein bisschen eleganter.

kiar 1. Apr 2005 17:49

Re: Firebird SQL und Runden bei Count
 
hallo,

mache eine stored Procedure, die du in der DB speicherst und dann immer nur abrufst.

es ist immer besser, wenn du alles,was in der db gemacht werden kann, da auch gemacht wird.

raik

Basilikum 1. Apr 2005 17:52

Re: Firebird SQL und Runden bei Count
 
so kannst Du Firebird zu Floats zwingen:
SQL-Code:
SELECT CAST(count(nummer) AS Float) / CAST(count(distinct eingangsdatum) AS FLOAT) FROM auftrag;

kiar 1. Apr 2005 17:57

Re: Firebird SQL und Runden bei Count
 
hallo basilikum,

so geht es auch, wobei ich immer wieder Stored Procedure bevorzugen würde.

raik

buyden 1. Apr 2005 18:07

Re: Firebird SQL und Runden bei Count
 
hi basilikum

so in der art hab ich mir das vorgestellt, jetzt müssten nur noch die Kommastellen auf 3 festgelegt werden können :roll:

Gibt Cast das auch her?

omata 1. Apr 2005 19:23

Re: Firebird SQL und Runden bei Count
 
Moin,

es gibt noch eine übersichtlichere Variante (mit 1.0 multiplizieren)

SQL-Code:
SELECT ROUND((1.0 * COUNT(nummer)) / COUNT(DISTINCT eingangsdatum), 3)
FROM auftrag;
...ich würde immer von einer Stored Procedure abraten (das ist den Aufwand nicht wert)...

MfG
Thorsten

buyden 1. Apr 2005 20:10

Re: Firebird SQL und Runden bei Count
 
Da kommt bei mir ne Fehlermeldung von wegen "Function unknown - ROUND"

omata 1. Apr 2005 20:28

Re: Firebird SQL und Runden bei Count
 
oh ja, das habe ich auch gerade gemerkt. sorry.

Aber es geht noch einfacher als ich dachte...

SQL-Code:
SELECT (1.000 * COUNT(nummer)) / COUNT(DISTINCT eingangsdatum)
FROM auftrag;
Mit den Nachkommastellen der 1 kann man die gewünschte Genauigkeit festlegen.

MfG
Thorsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:39 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz