[MySQL] Kruistabel maken

Pagina: 1
Acties:
  • 156 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • WimB
  • Registratie: Juli 2001
  • Laatst online: 30-03-2024
Hier even de situatie:
Ik heb volgende tabel:
code:
1
2
3
4
5
6
7
8
9
10
Id     persoon  periode   punten
--------------------------------
1   wim Kerstmis    15
2   wim Kerstmis    17
3   wim Pasen    13
4   wim Juni      16
5   jan Kerstmis    12
6   jan Pasen    16
7   jan Pasen    13
8   jan Juni      17

en ik wil daar volgende tabel van maken:
(de getallen zijn het gemiddelde van de punten)
code:
1
2
3
4
persoon Juni  Kerstmis   Pasen
-------------------------------
jan 17  12   14,5
wim 16  16   13

In Access kan dit eenvoudigweg door:
code:
1
2
3
4
5
TRANSFORM Avg(puntenboek.punten) AS GemVanpunten
SELECT puntenboek.persoon
FROM puntenboek
GROUP BY puntenboek.persoon
PIVOT puntenboek.periode;

Maar is MySQL lukt dit niet. Hoe moet ik dit in MySQL doen?

Acties:
  • 0 Henk 'm!

  • Lurge
  • Registratie: Maart 2000
  • Niet online

Lurge

ActueleWind

ik denk niet dat mysql het transform en het pivot commando kent als ik de manual doorzoek op transform of pivot krijg ik geen zoekresultaten namelijk...

ActueleWind


Acties:
  • 0 Henk 'm!

  • WimB
  • Registratie: Juli 2001
  • Laatst online: 30-03-2024
Op dinsdag 23 juli 2002 09:19 schreef Lurge het volgende:
ik denk niet dat mysql het transform en het pivot commando kent als ik de manual doorzoek op transform of pivot krijg ik geen zoekresultaten namelijk...
Ja, dat had ik ook al begrepen. Maar dat wil toch niet zeggen dat je met MySQL geen kruistabellen kunt maken, hoop ik. Er zal toch wel een alternatieve methode zijn om dit op te lossen?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 05-06 22:44

Janoz

Moderator Devschuur®

!litemod

Hmm .. ik vind het een erg vreemde tabel. Mischien een ID om eens over normalizeren na te denken?

Ik betwijfel het trouwens of je die comando's uberhaupt bij een ander DB-prog tegen zult komen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • WimB
  • Registratie: Juli 2001
  • Laatst online: 30-03-2024
Op dinsdag 23 juli 2002 09:27 schreef Janoz het volgende:
Hmm .. ik vind het een erg vreemde tabel. Mischien een ID om eens over normalizeren na te denken?
...
Volgens mij is de tabel zo genormaliseerd:

Personen
code:
1
2
3
4
Id   naam
----------
1    wim
2    jan

Periode
code:
1
2
3
4
5
Id   naam
----------
1   Kerstmis
2   Pasen
3   Juni

Puntenboek
code:
1
2
3
4
5
6
7
8
9
10
Id  persoonID  periodeID   punten
----------------------------------
1   1       1       15
2   1       1       17
3   1       2       13
4   1       3       16
5   2       1       12
6   2       2       16
7   2       2       13
8   2       3       17

Maar volgens mij maakt dit het probleem nog ingewikkelder dan het al is, al kan ik mij daarin vergissen.

Acties:
  • 0 Henk 'm!

  • Againzender
  • Registratie: Maart 2002
  • Laatst online: 10:49
Dit is typisch iets van Access, volgens mij gebruikt MS het niet eens in SQL-Server.
Misschien via ODBC MySQL benaderen vanuit Access, en dan die TRANSFORM er op los laten? :?

Acties:
  • 0 Henk 'm!

  • WimB
  • Registratie: Juli 2001
  • Laatst online: 30-03-2024
Op dinsdag 23 juli 2002 09:39 schreef Againzender het volgende:
Dit is typisch iets van Access, volgens mij gebruikt MS het niet eens in SQL-Server.
Misschien via ODBC MySQL benaderen vanuit Access, en dan die TRANSFORM er op los laten? :?
Dat lukt, heb ik geprobeerd. Maar ik wil het resultaat op de server en daar heb ik geen Access (=Linux server). Het uiteindelijke resultaat moet op een website komen.
Misschien kan dit dan beter in php opgelost worden. Weet iemand hoe ik het dan moet aanpakken om een array te verkrijgen die overeenkomt met de kruiistabel die ik wil bereiken?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 19-05 13:58

drm

f0pc0dert

't lijkt me vreemd om je data zo op te slaan, idd. Ga even na hoe je hem het beste kunt normaliseren. Ik vraag me nu bijvoorbeeld af wat Id voor Id is... Waar is dat een identificatie van :? Van een relatie? Lijkt me niet nodig...

legenda ;)
table
primary key


Denk aan zoiets:
person
personID
name

period
periodID
name

points
periodID
personID
points


Daarnaast vind ik dit een redelijk vreemd verschijnsel:
code:
1
2
1   wim Kerstmis    15
2   wim Kerstmis    17

Is het niet logischer om daar de punten (whatever that may be) op te tellen?
code:
1
1   wim Kerstmis    32

Vervolgens is zo'n layout van gegevens de taak van de interface (queries/ script) en niet van de db :)

[edit: drm doet weer eens veel te lang over zijn post :{ ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • WimB
  • Registratie: Juli 2001
  • Laatst online: 30-03-2024
Op dinsdag 23 juli 2002 09:42 schreef drm het volgende:
Heel veel tekst, waarvoor dank
Dat is allemaal goed en wel, maar dat lost mijn probleem niet op. Als ik de tabellen maak zoals jij nu zegt, krijg ik ze nog steeds niet in een kruistabel.
En wat die "dubbele" records betreft, een persoon kan nu eenmaal meerdere testen voor een periode afleggen, en deze moeten apart opgevraagd kunnen worden. Vandaar dat wim 2 testen voor Kerstmis heeft enzo.

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 15:44
Als je grouped by persoon,periode en de punten summed dan ben je al bijna zover volgens mij.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 19-05 13:58

drm

f0pc0dert

WimB:
Dat is allemaal goed en wel, maar dat lost mijn probleem niet op. Als ik de tabellen maak zoals jij nu zegt, krijg ik ze nog steeds niet in een kruistabel.
Ik dacht dat wat je in je eerste post zei
...Ik heb volgende tabel:...
dus ook daadwerkelijk je ontwerp van je db was, vandaar :)

Nog steeds denk ik dat je dit probleem via een interface op moet lossen en niet in de database vast moet willen leggen... Zeker in MySQL gaat je dat niet (netjes) lukken.
En wat die "dubbele" records betreft, een persoon kan nu eenmaal meerdere testen voor een periode afleggen, en deze moeten apart opgevraagd kunnen worden. Vandaar dat wim 2 testen voor Kerstmis heeft enzo.
Ok, dus die Id die je daarboven hebt staan, stelt het id van een test voor? In dat geval komt er dus nog een veld bij, bij points, ook primary key, namelijk testID.

Dan is het ook logischer om periodID weer een eigenschap te laten zijn van test, oftewel, de periodID verdwijnt uit de koppeltabel...
</offtopic ontwerp-geneuzel>

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1