groeperen
ik heb een query met het volgende als uitkomst:
geslacht | aantal
Mannen | 30
Vrouwen | 1
Mannen | 43
Vrouwen | 4
Wat ik nu wil is dat mannen en vrouwen gegroepeerd worden
Dus mannen 30 + mannen 43 = mannen 73
en vrouwen 1 + vrouwen 4 = vrouwen 5
dus dit:
geslacht | aantal
Mannen | 73
Vrouwen | 5
Ik heb het al geprobeerd met GROUP BY maar dit geeft geen resultaat
hier de query:
geslacht | aantal
Mannen | 30
Vrouwen | 1
Mannen | 43
Vrouwen | 4
Wat ik nu wil is dat mannen en vrouwen gegroepeerd worden
Dus mannen 30 + mannen 43 = mannen 73
en vrouwen 1 + vrouwen 4 = vrouwen 5
dus dit:
geslacht | aantal
Mannen | 73
Vrouwen | 5
Ik heb het al geprobeerd met GROUP BY maar dit geeft geen resultaat
hier de query:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
SELECT
'Mannen' as geslacht,
COUNT(relation.gender) as aantal
FROM
obj2_veritems
INNER JOIN relation ON (obj2_veritems.id_relation = relation.id)
WHERE
relation.gender = 'Man'
UNION
SELECT
'Vrouwen' as geslacht,
COUNT(relation.gender) as aantal
FROM
obj2_veritems
INNER JOIN relation ON (obj2_veritems.id_relation = relation.id)
WHERE
relation.gender = 'Vrouw'
UNION
SELECT
'Mannen' as geslacht,
COUNT(relation.gender) as aantal
FROM
obj2_veritems_link
INNER JOIN relation ON (obj2_veritems_link.id_relation = relation.id)
WHERE
relation.gender = 'Man'
UNION
SELECT
'Vrouwen' as geslacht,
COUNT(relation.gender) as aantal
FROM
obj2_veritems_link
INNER JOIN relation ON (obj2_veritems_link.id_relation = relation.id)
WHERE
relation.gender = 'Vrouw'
'Mannen' as geslacht,
COUNT(relation.gender) as aantal
FROM
obj2_veritems
INNER JOIN relation ON (obj2_veritems.id_relation = relation.id)
WHERE
relation.gender = 'Man'
UNION
SELECT
'Vrouwen' as geslacht,
COUNT(relation.gender) as aantal
FROM
obj2_veritems
INNER JOIN relation ON (obj2_veritems.id_relation = relation.id)
WHERE
relation.gender = 'Vrouw'
UNION
SELECT
'Mannen' as geslacht,
COUNT(relation.gender) as aantal
FROM
obj2_veritems_link
INNER JOIN relation ON (obj2_veritems_link.id_relation = relation.id)
WHERE
relation.gender = 'Man'
UNION
SELECT
'Vrouwen' as geslacht,
COUNT(relation.gender) as aantal
FROM
obj2_veritems_link
INNER JOIN relation ON (obj2_veritems_link.id_relation = relation.id)
WHERE
relation.gender = 'Vrouw'
Dan zul je je query in ieder geval anders op moeten bouwen. Begin gewoon met het selecteren van het aantal en het gender zoals dat in de database staat. Als je daar andere benamingen voor wilt geven, kun je dat met behulp van een CASE WHEN THEN constructie doen...
Verder is er geen relatie tussen de obj2_veritems en de obj2_veritems_link tabellen? Hoe kan eenzelfde soort informatie in meerdere tabellen opgeslagen worden? Met andere woorden, is je datamodel wel goed genormaliseerd? Als er wel een relatie is tussen die tabellen, zou je met een JOIN aan de slag kunnen.
Een andere oplossing die ik nog kan bedenken is dat je de UNION tussen de tabellen uitvoert in een subquery in de FROM clausule en vervolgens in de omvattende SELECT query groepeert op gender. Aangezien dat het overeenkomende veld is?
Verder is er geen relatie tussen de obj2_veritems en de obj2_veritems_link tabellen? Hoe kan eenzelfde soort informatie in meerdere tabellen opgeslagen worden? Met andere woorden, is je datamodel wel goed genormaliseerd? Als er wel een relatie is tussen die tabellen, zou je met een JOIN aan de slag kunnen.
Een andere oplossing die ik nog kan bedenken is dat je de UNION tussen de tabellen uitvoert in een subquery in de FROM clausule en vervolgens in de omvattende SELECT query groepeert op gender. Aangezien dat het overeenkomende veld is?
Er zit wel een relatie tussen de twee tabellen.
Ik had het ook geprobeerd met een join maar toen kreeg ik allemaal verkeerde resultaten.
En ons hele systeem is op deze opbouw gebaseerd dus kan niet zomaar even iets gaan veranderen.
Maar ik zal nog wel wat andere dingen gaan proberen
Ik had het ook geprobeerd met een join maar toen kreeg ik allemaal verkeerde resultaten.
En ons hele systeem is op deze opbouw gebaseerd dus kan niet zomaar even iets gaan veranderen.
Maar ik zal nog wel wat andere dingen gaan proberen
Zoals ik kan zien hebben beide tabellen een relatie met de relation tabel, niet direct met elkaar?
Maar goed, dan zou ik eens proberen of mijn laatste suggestie werkt. Iets als dit dus:
Maar goed, dan zou ik eens proberen of mijn laatste suggestie werkt. Iets als dit dus:
ik heb nu dit:
nu krijg ik als resultaat: id's | de naam | het geslacht
Dit ziet er allemaal goed uit.
Maar hoe kan ik nu ook de gegevens uit obj2_veritems_link eronder laten zien
Als het zou werken dan zou ik 78 resultaten moeten krijgen met beide tabellen
maar als ik het volgende doe:
dan krijg ik maar 47 resultaten.
Hoe kan ik het zo doen dat ik alle 78 resultaten juist te zien krijg
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT
obj2_veritems.id,
relation.displayname,
relation.gender
FROM
obj2_veritems
INNER JOIN relation ON (obj2_veritems.id_relation = relation.id)
obj2_veritems.id,
relation.displayname,
relation.gender
FROM
obj2_veritems
INNER JOIN relation ON (obj2_veritems.id_relation = relation.id)
nu krijg ik als resultaat: id's | de naam | het geslacht
Dit ziet er allemaal goed uit.
Maar hoe kan ik nu ook de gegevens uit obj2_veritems_link eronder laten zien
Als het zou werken dan zou ik 78 resultaten moeten krijgen met beide tabellen
maar als ik het volgende doe:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT
obj2_veritems.id,
relation.displayname,
relation.gender
FROM
obj2_veritems
INNER JOIN obj2_veritems_link ON (obj2_veritems.id = obj2_veritems_link.id_veritem)
INNER JOIN relation ON (obj2_veritems.id_relation = relation.id)
obj2_veritems.id,
relation.displayname,
relation.gender
FROM
obj2_veritems
INNER JOIN obj2_veritems_link ON (obj2_veritems.id = obj2_veritems_link.id_veritem)
INNER JOIN relation ON (obj2_veritems.id_relation = relation.id)
dan krijg ik maar 47 resultaten.
Hoe kan ik het zo doen dat ik alle 78 resultaten juist te zien krijg
Normaal gesproken komt het niet voor dat dezelfde soort gegevens in twee verschillende tabellen opgeslagen zijn. Bij jou is dat wel het geval en nu wil je deze data met 1 query uit die twee tabellen halen. Hiervoor zou je dus een UNION kunnen gebruiken, aangezien er geen directe relatie is tussen die tabellen en een JOIN dus niet goed te realiseren is.
Heb je de query die ik in mijn vorige post voorstelde al geprobeerd?
Heb je de query die ik in mijn vorige post voorstelde al geprobeerd?
Werkt dit niet?
Dan krijg je denk ik:
Of begrijp ik het verkeerd? :p
Code (php)
1
2
3
2
3
SELECT relation.gender, SUM(aantal) AS totaalpergeslacht
FROM obj2_veritems
GROUP BY relation.gender
FROM obj2_veritems
GROUP BY relation.gender
Dan krijg je denk ik:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
+---------+-------------------+
| gender | totaalpergeslacht |
+---------+-------------------+
| Mannen | 73 |
| Vrouwen | 5 |
+---------+-------------------+
| gender | totaalpergeslacht |
+---------+-------------------+
| Mannen | 73 |
| Vrouwen | 5 |
+---------+-------------------+
Of begrijp ik het verkeerd? :p
Gewijzigd op 10/08/2011 14:24:38 door Ruben Vanhoeyveld




