Hi

ik heb hier een code welke per speler 2 rijen van 13 velden terug geeft.
zou ik op één of ander manier slechts 1 per speler met 24 velden. naam en id zijn dus hetzelfde.
in voorbeeldcode slechts 5 velden

Jan

SELECT
	s1.id,
    "W",
	concat(s1.voornaam, " ", s1.naam) naam,
    sum(if(m.classe_wit="Nietgespeeld", 0, 1)) partijen_wit,
    sum(m.puntenwit) punten_wit
FROM
	trn__spelers s1
JOIN
	trn__partijen p
    on s1.id=p.speler1
JOIN
	trn__mogelijkeuitslagen m
    on m.id=p.uitslagid
WHERE
	s1.id_toernooi=57
group by
	p.speler1
UNION
SELECT
	s2.id,
    "Z",
	concat(s2.voornaam, " ", s2.naam) naam,
    sum(if(m.classe_zwart="Nietgespeeld", 0, 1)) partijen_wit,
    sum(m.puntenzwart) punten_wit
FROM
	trn__spelers s2
JOIN
	trn__partijen p
    on s2.id=p.speler2
JOIN
	trn__mogelijkeuitslagen m
    on m.id=p.uitslagid
WHERE
	s2.id_toernooi=57
group by
	p.speler2
ORDER BY 
    naam
Zoiets misschien? Heb wat hulp van ChatGPT gekregen.


SELECT
    id,
    naam,
    MAX(partijen_wit) AS partijen_wit,
    MAX(punten_wit) AS punten_wit,
    MAX(partijen_zwart) AS partijen_zwart,
    MAX(punten_zwart) AS punten_zwart
FROM (
    SELECT
        s1.id,
        concat(s1.voornaam, " ", s1.naam) naam,
        sum(if(m.classe_wit="Nietgespeeld", 0, 1)) partijen_wit,
        sum(m.puntenwit) punten_wit,
        0 AS partijen_zwart,
        0 AS punten_zwart
    FROM
        trn__spelers s1
    JOIN
        trn__partijen p
        on s1.id=p.speler1
    JOIN
        trn__mogelijkeuitslagen m
        on m.id=p.uitslagid
    WHERE
        s1.id_toernooi=57
    GROUP BY
        p.speler1

    UNION

    SELECT
        s2.id,
        concat(s2.voornaam, " ", s2.naam) naam,
        0 AS partijen_wit,
        0 AS punten_wit,
        sum(if(m.classe_zwart="Nietgespeeld", 0, 1)) partijen_zwart,
        sum(m.puntenzwart) punten_zwart
    FROM
        trn__spelers s2
    JOIN
        trn__partijen p
        on s2.id=p.speler2
    JOIN
        trn__mogelijkeuitslagen m
        on m.id=p.uitslagid
    WHERE
        s2.id_toernooi=57
    GROUP BY
        p.speler2
) AS subquery
GROUP BY
    id, naam
ORDER BY
    naam
Heb je de AVG (laten) overtreden voor slechts een codevoorbeeld? :)
https://www.security.nl/posting/827313/ChatGPT+in+strijd+met+AVG+oordeelt+Italiaanse+privacytoezichthouder

Wat er gevraagd wordt heet in het Engels ook wel 'tabulate' of 'pivot'. Je kunt tabellen of kolommen in MySQL/MariaDB pivoteren met het SO voorbeeld uit https://stackoverflow.com/questions/7674786/how-can-i-return-pivot-table-output-in-mysql

Er zijn vast ook grafische tools met query builders waarin je dit soort SQL kunt laten genereren. Moet je even zoeken op internet.
Bedankt Ariën
@Ad Fundum:
1. Gelukkig zijn we niet in Italië :)
2. Draaitabel systemen gebruik ik al geruime tijd. Ook gestart met hier een vraagje te stellen want toen kende ik nog niet veel van mysql, eigenlijk niets. Ik heb lang gezocht en niet bruikbaar gevonden om rijen te combineren en aan subquery heb ik niet gedacht.
Nog eentje om te overwegen; je kunt ook een SELECT in een SELECT doen, waarbij die binnenste SELECT-subquery gebruik maakt van de data van de buitenste SELECT:

SELECT
  x.iets,
  ( SELECT iets
    FROM y
    WHERE y.id = x.id
  ) AS iets_anders
FROM x

Het voordeel van deze aanpak is dat eerst de resultaten van x worden opgehaald, en daarna gecombineerd met y. Dat scheelt vooral wanneer x meerdere JOINs bevat in de performance.

Reageren