SQL - zählen und Prozent
gegen eine Wand, dass ein Graf UND ein Prozentsatz der Summe in einer einzigen Abfrage
Möchte ich die SUMME der Einheiten pro Lage UND das PROZENT der INSGESAMT ÜBER ALLE STANDORTE...
alles, was ich habe - ist wieder eine 0 (null) für Prozentsatz - ich glaube, ich habe gegossen, die Figur in eine dezimal-oder real-Typ - aber egal was ich versuche (Gießen jedes element, oder Gießen das ganze Ergebnis - ich bekomme Fehler...)
SELECT
count(I.ID) as count
,L.ID
,(
count(I.ID)
/
( SELECT count(I2.ID)
FROM LOCATION L2
JOIN ITEM I2 ON I2.LocID = L2.ID
WHERE L2.ID IN (36,38,39,40) )
) AS percent
FROM LOCATION L
JOIN ITEM I ON I.LocID = L.ID
WHERE L.ID IN (36,38,39,40)
GROUP BY L.ID
Irgendwelche Gedanken auf, wie, um wieder eine dezimal???
oder einfach nur machen Sie mehr elegant .. Periode?
Was ich "erwarten"
ID COUNT PERCENT
2436 362 30.47
2438 184 15.48
2439 173 14.56
2440 172 14.47
2441 151 12.71
2442 54 4.54
2702 92 7.74
========
"t" vorgeschlagen, das -
count(I. ID) * 100.0 /count(*) over () AS Prozent
Was ist die "over()" tun soll??
hier ist die Rückkehr:
ID COUNT PERCENT
2436 362 51
2438 184 26
2439 173 24
2440 172 24
2441 151 21
2442 54 7
2702 92 13
========== LÖSUNG
SELECT
count(I.ID) as count
,L.ID
,(
1.0 * count(I.ID) / (
SELECT count(I2.ID)
FROM LOCATION L2
JOIN ITEM I2 ON I2.LocID = L2.ID
WHERE L2.ID = L1.ID )
) * 100 AS percent
FROM LOCATION L
JOIN ITEM I ON I.LocID = L.ID
WHERE L.ID IN (36,38,39,40)
GROUP BY L.ID
- Welche Fehler machen Sie?
- Ich bin nicht einer DB2-Kopf, aber bei den meisten Sprachen/Systemen, wenn jeder ein Teil einer division ist ein double/float, dann floating-division durchgeführt. Der einfachste Weg, zu berufen, dass hier wäre das wirken des Grafen(I. ID) Teil der Gleichung.
- Wahrscheinlich können Sie vereinfachen Ihre Nenner wie SELECT count(I2.ID) VON ITEM I2, WOBEI I2.LocID IN (36,38,39,40) - es sollte eine Konstante
Du musst angemeldet sein, um einen Kommentar abzugeben.
Multiplizieren Sie einfach von einem float/decimal-Wert
Außerdem müssen Sie überlegen, einen null-Teiler geben "Division durch null" - Fehler
Prüfen Sie zunächst, ob Ihre Abfrage funktioniert und liefert die richtigen Werte mit:
Dann verwenden Sie die korrekte syntax für DB2-casting:
Könnten Sie die RUNDE() Funktion...
Oder einfach nur multiplizieren, indem Sie einen dezimalen Wert (d.h.
1.0
). Vielleicht möchten Sie auch eineIF
oderCASE
(je nach SQL-server) zu bekommen, um mögliche null-Wertecount(I.ID)
durch100
um einen echten Anteil, nicht nur eine Zahl, die kleiner als eins.