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
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
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!
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
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
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.