[MySQL] Subqueries samenvoegen met zelfde veldnamen

Pagina: 1
Acties:

  • ERIKvanPAASSEN
  • Registratie: September 2006
  • Laatst online: 20-09 10:12
Ik heb weer een probleempje/vraagje... 8)7

Ik heb de volgende query, welke grotendeels werkt:

SQL:
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
38
39
40
41
42
43
44
45
46
47
48
49
SELECT
   p1.id AS id,
   p1.voornaam AS voornaam,
   p1.tussenvoegsel AS tussenvoegsel,
   p1.achternaam AS achternaam,
   p1.wedstrijden + p2.wedstrijden AS wedstrijden,
   p1.gewonnen + p2.gewonnen AS gewonnen,
   (p1.gewonnen + p2.gewonnen) / (p1.wedstrijden + p2.wedstrijden) * 100 AS ratio
FROM
   ( SELECT
         l1.id AS id,
         l1.voornaam AS voornaam,
         l1.tussenvoegsel AS tussenvoegsel,
         l1.achternaam AS achternaam,
         count(*) AS wedstrijden,
         sum(sw1.result) AS gewonnen
      FROM
         wedstrijden AS w1,
         subwedstrijden AS sw1,
         teams AS t1,
         leden AS l1
      WHERE
         w1.id = sw1.team_match
         AND l1.id = sw1.player1
         AND t1.id = w1.team
         AND t1.competition = '4'
      GROUP BY l1.id
   ) AS p1,
   ( SELECT
         l2.id AS id,
         l2.voornaam AS voornaam,
         l2.tussenvoegsel AS tussenvoegsel,
         l2.achternaam AS achternaam,
         count(*) AS wedstrijden,
         sum(sw2.result) AS gewonnen
      FROM
         wedstrijden AS w2,
         subwedstrijden AS sw2,
         teams AS t2,
         leden AS l2
      WHERE
         w2.id = sw2.team_match
         AND l2.id = sw2.player2
         AND t2.id = w2.team
         AND t2.competition = '4'
      GROUP BY l2.id
   ) AS p2
WHERE p1.id = p2.id
ORDER BY ratio DESC


Deze telt het aantal gewonnen wedstrijden in een tabel per speler. In deze tabel staan subwedstrijden met o.a. de velden player1 en player2. player1 is altijd ingevuld, player2 alleen als de wedstrijd een dubbelpartij is. (Door regel 48)

Bovenstaande query telt alléén de gewonnen wedstrijden, wanneer iemand zowel player1 als player2 is geweest (in verschillende wedstrijden).

Klinkt allemaal erg vaag, maar het komt hierop neer:
Er zijn twee subquery's (r10-28 en r29-47) die beiden output geven met exact dezelfde velden. Eigenlijk wil ik gewoon de uitkomsten van deze twee queries samenvoegen in dezelfde kolommen en daarna groupen op id. Hoe kan ik dit doen?

  • momania
  • Registratie: Mei 2000
  • Nu online

momania

iPhone 30! Bam!

UNION :Y)

Neem je whisky mee, is het te weinig... *zucht*


  • ERIKvanPAASSEN
  • Registratie: September 2006
  • Laatst online: 20-09 10:12
Geweldig, dankjewel! ;)
Zo simpel kan het zijn, maar je moet het maar weten. Ernaar zoeken is minder makkelijk als je niet weet hoe je het noemt. :P

  • ERIKvanPAASSEN
  • Registratie: September 2006
  • Laatst online: 20-09 10:12
Voor de liefhebber:
Komt uiteindelijk dus op deze volledig werkende query. O+

SQL:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
SELECT
   p.id AS id,
   p.voornaam AS voornaam,
   p.tussenvoegsel AS tussenvoegsel,
   p.achternaam AS achternaam,
   sum(p.wedstrijden) AS wedstrijden,
   sum(p.gewonnen) AS gewonnen,
   (sum(p.gewonnen) / sum(p.wedstrijden)) * 100 AS ratio
FROM
   (
         (
            SELECT
               l1.id AS id,
               l1.voornaam AS voornaam,
               l1.tussenvoegsel AS tussenvoegsel,
               l1.achternaam AS achternaam,
               count(*) AS wedstrijden,
               sum(sw1.result) AS gewonnen
            FROM
               wedstrijden AS w1,
               subwedstrijden AS sw1,
               teams AS t1,
               leden AS l1
            WHERE
               w1.id = sw1.team_match
               AND l1.id = sw1.player1
               AND t1.id = w1.team
               AND t1.competition = '4'
            GROUP BY l1.id
         )
      UNION
         ( 
            SELECT
               l2.id AS id,
               l2.voornaam AS voornaam,
               l2.tussenvoegsel AS tussenvoegsel,
               l2.achternaam AS achternaam,
               count(*) AS wedstrijden,
               sum(sw2.result) AS gewonnen
            FROM
               wedstrijden AS w2,
               subwedstrijden AS sw2,
               teams AS t2,
               leden AS l2
            WHERE
               w2.id = sw2.team_match
               AND l2.id = sw2.player2
               AND t2.id = w2.team
               AND t2.competition = '4'
            GROUP BY l2.id
         )
   ) AS p
GROUP BY id
ORDER BY ratio DESC