Laden...

SELECT mit SUM und COUNT

Erstellt von Mackerlama vor 13 Jahren Letzter Beitrag vor 13 Jahren 970 Views
M
Mackerlama Themenstarter:in
118 Beiträge seit 2008
vor 13 Jahren
SELECT mit SUM und COUNT

verwendetes Datenbanksystem: MS SQL Server 2005

Hallo,

ich möchte eine Tabelle auslesen und dabei anhand eines Parameters entscheiden, ob eine Spalte bzw. Wert nur gezählt wird, oder Aufsummiert wird.

Versucht habe ich es mit einem UNION von 2 SELECT`s. Eins für COUNT und das andere für SUM. Jedoch schlägt dies fehl.

Tabelle sieht grob so aus

Id | Datum | Menge | ...

ich will für jedes Datum die Menge summieren oder hochzählen.

SELECT Datum, COUNT(*) AS Menge FROM Tabelle WHERE Menge >= 5 GROUP BY Datum UNION SELECT Datum, SUM(Menge) AS Menge FROM Tabelle WHERE Menge < 5 GROUP BY Datum

geht nicht, was daran liegt, das Datum mehrfach vorkommt.

Hat jemand von euch eine Idee?

S
167 Beiträge seit 2008
vor 13 Jahren

Hallo,
was spricht gegen

select datum, COUNT(*) cnt, SUM(menge) s from table1 group by datum

M
Mackerlama Themenstarter:in
118 Beiträge seit 2008
vor 13 Jahren

dann habe ich alle datensätze gezählt und die menge summiert. ich will aber ein mittelding.

problem ist einfach die mengenangabe. manchmal beschreibt die menge eine anzahl in einem paket - welches aber nur als menge = 1 zu sehen ist. eine schwelle von 5 hat sich als annehmbar erwiesen.

bisher mache ich halt 2 selects und führe die programmatisch zusammen. schön wäre natürlich eine lösung, die der sql server direkt zur verfügung stellt.

V
162 Beiträge seit 2010
vor 13 Jahren

Hi,

wo ist das Problem das es 2 SQL Statment sind die mit Union
zusammen geführt werden?
Es gibt keine andere Lösung, zumindest kenn ich keine andere.
Vielleicht solltest du ein 2tes Mengenspalte schaffen.
Denn was ist wenn die Menge 5 real ist und jemand weiß es eben nicht das du so zählst.
Für mich ist deine Methode unelegant.
Man kann auch ein Kriterieum (Type) einführen und daran enscheiden,
ob SUM() oder Count() verwendet wird.
Wie gesagt bei dir solltest du über den Ansatz noch mal nachdenken.

MfG
Björn

Das Leben ist schön!

M
Mackerlama Themenstarter:in
118 Beiträge seit 2008
vor 13 Jahren

*edit*
vergesst, was ich gesagt habe, mit UNION funktioniert natürlich. habe es eben einfach noch mal gemacht, weil ich nicht verstehen konnte, woran es lag und es geht. vermutlich nur ein tippfehler gestern, den ich nicht gefunden habe.

ja es ist nicht elegant, aber eine änderung an der datenbasis kann ich nicht vornehmen. ich muss damit so arbeiten, wie es ist.

das die 5 auch mal korrekt sein kann, ist mir bewusst. aber der fehler, der durch dieses vorgehen entsteht, ist vertretbar.

bisher mache ich halt ein "meta-select" und ein weiteres wenn ich iterativ die daten einlese. das sind pro jahr ca. 300 zusätztlich selects, mal x kategorien, mal x jahre.

mit union funktioniert es nicht, zu mindest nicht so wie ich es versuche - siehe oben
--> die Fehlermeldung dazu, sagt rein gar nichts aus (die im management studio)

mit types kenne ich mich gar nicht aus - wo nach muss ich da konkret suchen?

V
162 Beiträge seit 2010
vor 13 Jahren

HI,

Count gibt ein INT wieder.
Ist Menge vielleicht kein Int?
Dann kann es zu einem Fehler kommen.

siehe Cast / Convert

Das Leben ist schön!

M
Mackerlama Themenstarter:in
118 Beiträge seit 2008
vor 13 Jahren

hi, das problem war, dass ich bei beiden "unterselects" ein order gemacht hatte ... einfach weglassen und den union ausdruck (also die beiden selects) als tabelle nehmen und dort ordern (und gruppieren) dann funktioniert alles und geht wunderbar schnell