Ingo Reschke » Posts for tag 'count'

Rechnen mit SQL

Mit sql kann man auch prima (SQL)-Serverseitig rechnen. So kann Rechenpower auf den SQLServer verlagern und vor allem die Datenmenge die zurückgegeben wird verringern. Weiterhin kann dadurch die Komplexität des ausführenden Codes verringert werden. Angenommen wir haben eine Tabelle die Daten über kostenstellen (kst), Menge in kg von Produkt x und der Kg-Preis enthält. Die folgende Abfrage:

SELECT   id, kst, menge, kg_preis, materialkosten, auftrag_id, lieferdatum
FROM     dbo.hlp_han_trockeneis_stats
ORDER BY kst

liefert bspw. diese Ausgangsdatensätze.
181 2000 1400 5 7000 201012665 2010-06-26 00:00:00.000
203 2000 800 10 8000 201019020 2010-07-02 00:00:00.000
202 2001 800 5 4000 201018583 2010-06-17 00:00:00.000
145 2001 500 5 2500 201013950 2010-06-17 00:00:00.000
151 2003 800 5 4000 201019455 2010-07-01 00:00:00.000
156 2003 1200 5 6000 201017137 2010-06-19 00:00:00.000
187 2004 1200 5 6000 201010679 2010-07-05 00:00:00.000
127 2005 1500 5 7500 201019704 2010-06-24 00:00:00.000

Zählen der Datensätze zu einer kst.

SELECT kst, COUNT(*) AS cnt
FROM hlp_han_trockeneis_stats
GROUP BY kst

Die Summe der Spalte Menge pro Kostenstelle ermitteln.

SELECT kst, SUM (menge) AS sum_Menge
FROM hlp_han_trockeneis_stats
GROUP BY kst

Jetzt brauchen wir noch den Durchschnitt des KgPreises. Also die Summe des Kg-Preises durch die Anzahl der Datensätze pro kst.

SELECT kst, SUM(kg_preis) / COUNT(*) AS sum_kg_preis
FROM hlp_han_trockeneis_stats
GROUP BY kst

Und nun alles zusammen.

SELECT kst, COUNT(*) AS cnt, SUM(menge) AS sum_menge, SUM(kg_preis) / COUNT(*) AS sum_kg_preis, SUM(materialkosten) sum_material
FROM dbo.hlp_han_trockeneis_stats
GROUP BY kst

Erzeugt folgende Datensätze

2000    2    2200    7,5    15000

2001    2    1300    5    6500

2003    2    2000    5    10000

2004    1    1200    5    6000

2005    1    1500    5    7500

Posted in SQL
Tags: , ,