Abfrage gesucht (Gruppierung und Summierung)

Papenburger

Erfahrenes Mitglied
Hallo,

ich versuche ein Bewertungsscript für meine Seite (http://www.feuerwehrland.de.ms) zu proggen. Nun suche ich eine Abfrage, die die IDs der Beiträge gruppiert, die Bewertungen der gruppierten ID´s addiert und davon dann denn Mittelwert ausrechnet...

Wer kann mir dabei helfen?
Danke!


LG Papenburger
 
Eventuell sowas:
SQL:
SELECT 
   SUM( `voteResult`.`result` ) AS gezaehlt, 
   `voteResult`.`id` 
FROM 
   `voteResult`, 
   `posts` 
WHERE 
   `voteResult`.`postid` = `posts`.`id` 
GROUP BY 
   `voteResult`.`result` 
ORDER BY 
   `voteResult`.`id`

Tabellen:
SQL:
-- 
-- Tabellenstruktur für Tabelle `posts`
-- 

CREATE TABLE `posts` (
  `id` int(11) NOT NULL auto_increment,
  `text` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=4 ;

-- 
-- Daten für Tabelle `posts`
-- 

INSERT INTO `posts` (`id`, `text`) VALUES (1, 'testtest1'),
(2, 'testtest2'),
(3, 'testtest3');
-- 
-- Tabellenstruktur für Tabelle `voteresult`
-- 

CREATE TABLE `voteresult` (
  `id` int(11) NOT NULL auto_increment,
  `postid` int(11) NOT NULL default '0',
  `result` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=9 ;

-- 
-- Daten für Tabelle `voteresult`
-- 

INSERT INTO `voteresult` (`id`, `postid`, `result`) VALUES (1, 1, 5),
(2, 1, 3),
(3, 1, 5),
(4, 1, 4),
(5, 2, 6),
(6, 2, 1),
(7, 3, 5),
(8, 2, 1);

Kannst du natürlich auf jede Tabellenstruktur anpassen.
Probier es einfach mal in PhpMyAdmin aus.
 
Theoretisch müsste das doch auch so gehen:
(Die tabellennammen existieren so in der DB)

select group(menueid) as 'gruppenmenue' from bewertung AND select sum(bewertung) from bewertung


Geht das nicht irgendwie mit dem Having-Befehl oder sowas. Oder mit nem Theta-Join? Bin mir da nicht ganz sich. Also Hauptsächlich sollen erstmal die MenueId´s grupiert werden, die Bewertungen der MenueID die gleich sind, sollen addiert werden und durch die Anzahl der abgegebenen bewertungen für diese gruppierte MenueID errechnet werden...

Das müsste doch mit dem Having-Befehl machbar sein, oder nicht?
 
Wenn ich das richtig verstehe, ist das doch soetwas, wie ich da oben geschrieben habe.

Wenn nicht, erklär das mal genauer, oder anhand eines (besseren) Beispiels. Was sind bei z.B. die menueid's ?

EDIT:
Vielleicht ist diese Abfrage besser.
SQL:
SELECT 
   SUM( `voteResult`.`result` ) AS sternchengesammt, 
   `voteResult`.`result` AS sternchen,
   `voteResult`.`postid` 
FROM 
   `voteResult`, 
   `posts` 
WHERE 
   `voteResult`.`postid` = `posts`.`id` 
GROUP BY 
   `voteResult`.`result` 
ORDER BY 
   `voteResult`.`result`
 
Zuletzt bearbeitet:
Ich versuch das noch mal:
Code:
+----+---------+----------+
| ID | MenueID | Bewertet |
+----+---------+----------+
| 1  |  1      |  6       |
| 2  |  2      |  5       |
| 3  |  1      | 10       |
+----+---------+----------+


Nun soll die MenueID (welche eine Verknüpfung auf den Primär-Schlüssel des Inhalts hat) gruppiert werden. Die Punkte (Bewertung) sollen hierbei aber addiert und durch die MenueID (in diesem Fall durch 2) geteilt werden.

Als ergebnis würde in diesem Beispiel herauskommen:

MenueID 1 => 8 Punkte
MenueID 2 => 5 Punkte

Danke für deine Hilfe.


LG Daniel
 
Ich denke, für die gesammte (SUM()) und die durchschnittliche Bewertung (AVG()) müsste es dieses dann sein:

SQL:
SELECT
   'MenueID',
   SUM(`bewertet`),
   AVG(`bewertet`),
FROM
    `Bewertung` 
GROUP BY
    `MenueID` 
ORDER BY
    `MenueID`
 
Zuletzt bearbeitet von einem Moderator:
fehlt da nicht noch nen count (zähler) um die Punkte der MenueID durch die Anzahl der bewertungen für die einzelne MenueID zu teilen!?
 
AVG () berechnet den Durchschnittswert der gesammten Spalte und nicht nur den von den grupierten MenueID´s...
 
Papenburger hat gesagt.:
AVG () berechnet den Durchschnittswert der gesammten Spalte und nicht nur den von den grupierten MenueID´s...
eben nicht! Hast Du es wenigstens mal ausprobiert? :confused:
Dann wäre ja die GROUP-Anweisung ziemlich überflüssig...
Hier schriftlich: :)

1. Inhalt der Tabelle (wie in Deinem Beispiel):
Code:
    MENUEID    BEWERTET
=========== ===========
	  1	      6
	  2	      5
	  1	     10

2. Ausgabe mit Sum() und AVG():
Code:
     MENUEID SUM(BEWERTET) AVG(BEWERTET)
=========== ============= =============
	  1	   16	        8
	  2	    5	        5

Gruß,
Sparks
 

Neue Beiträge

Zurück