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
InformationsquelleAutor jpmyob | 2011-09-22
Schreibe einen Kommentar