[MySQL] SUM(*) bei den xxx höchsten Werten

Benutzer-621

abgemeldet
20 April 2006
744
64
Moin,
Wie summiere ich die zehn größten (Integer) Datensätze? Ich glaub ich sitz grad aufm Schlauch, ich denk, dass ich das schonmal selbst rausgefunden habe, weiß aber nicht mehr wie. Thx schonmal :D.
 
tester schrieb:
jo, hab ich mir auch schon gedacht, klappt aber leider nicht. Kann es vllt. evtl. an der Version liegen, was ich aber nicht glaub?
Sollte eigentlich schon gehen. Also Versionsunterschiede halte ich da für sehr unwahrscheinlich - sollte schließlich Grundlage sein. Vielleicht ist dein Datenfeld nicht vom Typ INTEGER? Oder was geht denn konkret nicht?


172.
 
happymaster schrieb:
SUM(feld)

ORDER BY feld DESC

LIMIT 0, 10
Kleiner Denkfehler ;)

edit:
großer Denkfehler :doh:
SELECT SUM(`feld`)
FROM `table`
ORDER BY SUM(`feld`) DESC
LIMIT 10


Du brauchst 2 Queries dafür, weil das in der Form
SELECT SUM(`feld`)
FROM `table`
WHERE bloß die größten 10 IDs
abläuft.

Oder bin ich jetzt total neben der Mütze ? :-?
 
happymaster schrieb:
Sollte eigentlich schon gehen. Also Versionsunterschiede halte ich da für sehr unwahrscheinlich - sollte schließlich Grundlage sein. Vielleicht ist dein Datenfeld nicht vom Typ INTEGER? Oder was geht denn konkret nicht?


172.

Typ = int(11) :D

Es wird alles zusammengerechnet, also

SELECT SUM(*) FROM table

ich denk mir mal da muss was mit GROUP BY rein.
 
Öhrm, das wird ohne Subselect nicht klappen. LIMIT bezieht sich immer nur auf die Anzahl der zurückgegebenen, nicht der ausgewerteten Ergebniszeilen.
 
tleilax schrieb:
Öhrm, das wird ohne Subselect nicht klappen. LIMIT bezieht sich immer nur auf die Anzahl der zurückgegebenen, nicht der ausgewerteten Ergebniszeilen.
Okay, da lag wohl mein großer Denkfehler. Sorry.

theHacker schrieb:
ORDER BY SUM(`feld`)
What the? Sortieren nach einer Konstanten? :hö:

Edit: ah.. das war dein Denkfehler darauf. :mrgreen:


Edit:

MySQL 5.0 Reference Manual :: 12 Functions and Operators :: 12.10 Functions and Modifiers for Use with GROUP BY Clauses :: 12.10.1 GROUP BY (Aggregate) Functions
SUM([DISTINCT] expr)

Returns the sum of expr. If the return set has no rows, SUM() returns NULL. The DISTINCT keyword can be used in MySQL 5.0 to sum only the distinct values of expr.

Was hieße das konkret? Kann man praktisch mit einer WHERE-Klausel in der expr arbeiten? Abgesehen davon stellt sich die Frage, ob es Nutzen hätte... oder wer schon mySQL 5.0 nutzt; abgesehen davon weiß ich nicht, ob's das überhaupt schon gibt (oder das schon früher möglich ist). :oops:
Ansonsten fände ich ein spezielle auf die Einschränkungen (WHERE, LIMIT, etc.) eingehende SUM()-Funktion praktisch.


171.
 
Zuletzt bearbeitet:
ich hatte gestern mal bissi rumgespielt und bin auf folgendes gestoßen

PHP:
mysql_query("SELECT SUM(`Bla`) AS menge from tabelle GROUP BY `bla` ORDER BY `BLA` DESC LIMIT 0, 2");
bringt mir die letzten beiden größten ID allerdings nicht addiert

eher warscheinlich ist dieser Query
PHP:
$res = mysql_fetch_object(mysql_query("SELECT a.`ID` , a.`LastActivity` AS blubb, SUM( b.`LastActivity` ) AS menge
FROM member AS a
INNER JOIN member AS b
GROUP BY a.`ID`
ORDER BY a.`ID` DESC
LIMIT 0 , 2"));

echo $res->menge;

wobei ich nicht SUM(`blubb`) machen kann, das verweigert er mir, der will das wieder aus der Tabelle holen

aber warum so kompliziert,machs doch ganz einfach mit fast 0 Aufwand

PHP:
$sql = mysql_query("SELECT ID, `LastActivity`
FROM member
ORDER BY `ID` DESC
LIMIT 0 , 2");

$gesamt = 0;
while($res = mysql_fetch_object($sql))
{
   $gesamt += $res->LastActivity;
}

echo $gesamt;

*edit ich habe noch was sehr interessantes bei google Groups gefunden auf der Suche nach einem meiner Probs ;) vielleicht bringt das jemanden auf die richtige Lösung bin nu zu faul hab genug gebastelt :yawn:

PHP:
select Bst.*,ArtBez,FilBez from
(
select BstFilNr,BstArtNr, sum(BstMenge) BstMengeSum, BstSachb
from Bestellmengen
group by BstFilNr,BstArtNr, BstSachb
) Bst
left outer join Artikel
on BstArtNr  ArtNr
left outer join Filalen
on BstFilNr  Filnr

https://groups.google.de/groups?q=U...,GGGL:2006-11,GGGL:de&sa=X&oi=groups&ct=title

der zweite link war des
 
Zuletzt bearbeitet:
Im Grunde sollte ein simples Subquery gehen:
SELECT SUM(werte) FROM tabelle WHERE id IN (SELECT id FROM tabelle ORDER BY werte DESC LIMIT 10);

Benötigt halt wieder MySQL 4.1 aufwärts.