Hallo,
Ik zit met een probleem dat ik zelf niet op heb kunnen lossen:
Ik heb twee tabellen met verschillende data er in gelinkt:
Tabel Aanwezig:
ID, NAAM, DATUM

Tabel Inleg:
ID, NAAM, DATUM, BEDRAG

Het volgende moet gedaan worden:
Er moet geteld worden vanuit tabel aanwezig hoevaak iemand aanwezig was. Daarna moet uit de tabel inleg geteld worden per naam wat het totaal BEDRAG is. Hierna moet op de webpagina het volgende getoond worden: TOTAAL INGELEGD BEDRAG/TOTAAL AANTAL KEER AANWEZIG, en dit natuurlijk ook weer per persoon.

Voor de verschillende operaties heb ik deze SQL:

om te kijken hoe vaak iemand aanwezig was:
SELECT naam, COUNT(*) FROM aanwezig GROUP BY naam ORDER BY count(naam) DESC

om het totaalbedrag te berekenen per persoon:
SELECT naam, SUM(bedrag) AS bedrag_totaal FROM inleg GROUP BY naam ORDER BY SUM(bedrag) DESC

Hulp is van harte welkom!!

SELECT
	a.naam,
	(SELECT SUM(bedrag) FROM inleg i WHERE i.naam = a.naam) bedrag_totaal,
	COUNT(*) aantal
FROM
	aanwezig
GROUP BY a.naam
ORDER BY aantal DESC, bedrag_totaal DESC

Of

SELECT
	naam,
	COALESCE(i.bedrag_totaal, 0) bedrag_totaal,
	COUNT(*) aantal
FROM
	aanwezig a
LEFT JOIN
	(SELECT
		naam,
		SUM(bedrag) bedrag_totaal
	FROM
		inleg
	GROUP_BY naam
	) i
	USING (naam)
GROUP BY naam
ORDER BY aantal DESC, i.bedrag_totaal DESC


Ger van Steenderen op 28/12/2014 19:24:42


SELECT
	a.naam,
	(SELECT SUM(bedrag) FROM inleg i WHERE i.naam = a.naam) bedrag_totaal,
	COUNT(*) aantal
FROM
	aanwezig
GROUP BY a.naam
ORDER BY aantal DESC, bedrag_totaal DESC

Of

SELECT
	naam,
	COALESCE(i.bedrag_totaal, 0) bedrag_totaal,
	COUNT(*) aantal
FROM
	aanwezig a
LEFT JOIN
	(SELECT
		naam,
		SUM(bedrag) bedrag_totaal
	FROM
		inleg
	GROUP_BY naam
	) i
	USING (naam)
GROUP BY naam
ORDER BY aantal DESC, i.bedrag_totaal DESC





Heel erg bedankt voor de hulp & een fijne jaarwisseling gewenst!
Ger van Steenderen op 28/12/2014 19:24:42


SELECT
	a.naam,
	(SELECT SUM(bedrag) FROM inleg i WHERE i.naam = a.naam) bedrag_totaal,
	COUNT(*) aantal
FROM
	aanwezig
GROUP BY a.naam
ORDER BY aantal DESC, bedrag_totaal DESC

Of

SELECT
	naam,
	COALESCE(i.bedrag_totaal, 0) bedrag_totaal,
	COUNT(*) aantal
FROM
	aanwezig a
LEFT JOIN
	(SELECT
		naam,
		SUM(bedrag) bedrag_totaal
	FROM
		inleg
	GROUP_BY naam
	) i
	USING (naam)
GROUP BY naam
ORDER BY aantal DESC, i.bedrag_totaal DESC






Hallo,
Nogmaals bedankt voor de hulp!
Echter zit ik nu met het volgende probleem:
De bedragen worden niet gesorteerd op bedrag om een of andere reden..

Dit gebruik ik nu:

SELECT
    aanwezig.naam,
    (SELECT SUM(bedrag) FROM inleg WHERE inleg.naam = aanwezig.naam AND inleg.diehard = '1') bedrag_totaal,
    COUNT(*) aanwezig
FROM
    aanwezig WHERE aanwezig.diehard = '1'
GROUP BY aanwezig.naam
ORDER BY bedrag_totaal DESC


&


if ($resultscore->num_rows > 0) {
     echo "<table><font><td width='60px'>";
    // output data of each row
    while($rowscore = $resultscore->fetch_assoc()) {
		$score = $rowscore["bedrag_totaal"]/$rowscore["aanwezig"];
		echo "<tr><td>" . $rowscore["naam"]. "</td><td>" . number_format($score ,2) . " €/keer</td></tr>";
    }
	     echo "</table></font>";
} else {
    echo "0 results";
}


Hoe kan ik dit oplossen?!
ORDER BY NULL, bedrag_totaal DESC

Je zegt in je openingspost dat die twee tabellen aan elkaar gelinkt zijn, hoe?

Wellicht kan het ook zonder de subquery, en kan je MySQL ook het gemiddelde laten bepalen, ze hebben daar niet voor niets (maar wel gratis) de AVG() functie voor

ORDER BY NULL, bedrag_totaal DESC werkt helaas niet.

Hoe bedoelt u hoe ze gelinkt zijn aan elkaar?
Heeft de inleg te maken met het aanwezig zijn, of staat dat totaal los van elkaar?

En welk datatype heeft de kolom bedrag?
De inleg staat los van elkaar. Echter moet voor een zogenaamd kerngetal wel de totale inleg per persoon gedeeld worden door het totaal aantal keer aanwezig.

De kolom bedrag staat als decimal(10,2)
Heb je het al eens geprobeerd met de tweede query (met de left join)?

Reageren