Toon posts:

[sql] 2 query resultaten optellen???

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

Verwijderd

Topicstarter
Zoals in mijn topic naam is aangegeven wil ik 2 resultaten bij elkaar optellen.

Ik heb 2 queries:

SQL:
1
2
3
4
5
6
7
8
SELECT g.g_gebruikersnaam AS naam1, COUNT(v.v_eind_team1) AS Score1 
FROM gebruikers g, voorspelling v, wedstrijden w
WHERE v.w_id = w.w_id AND g.g_id = v.g_id 
  AND v.v_ronde =  'poule' AND w.w_ronde = 'poulewedstrijden' 
  AND v.v_eind_team1 = w.w_eind_team1 
  AND v.v_eind_team2 = w.w_eind_team2 AND w.w_winnaar IN ('1', '2', '3') 
GROUP BY g.g_gebruikersnaam 
ORDER BY v.v_eind_team1


Deze query resulteert een gebruiker + score

SQL:
1
2
3
4
5
6
7
8
SELECT g.g_gebruikersnaam AS naam, COUNT(v.v_eind_team1) AS Score2
FROM gebruikers g, voorspelling v, wedstrijden w, teams e, teams t
WHERE v.w_id = w.w_id AND g.g_id = v.g_id AND v.v_ronde =  'poule' 
  AND w.w_team1 = t.t_pouleteam AND w.w_team2 = e.t_pouleteam 
  AND w.w_ronde = 'kwartfinale' AND v.v_eind_team1 = w.w_eind_team1 
  AND v.v_eind_team2 = w.w_eind_team2 AND w.w_winnaar IN ('1', '2', '3') 
GROUP BY g.g_gebruikersnaam
ORDER BY v.v_eind_team1


Deze query resulteert een gebruiker + score 2

Het betreft om een andere score, dus heb ik ze even in aparte querys gezet.
Maar de vraag is hij krijg ik beide scores bij elkaar opgeteld.
Als ik er een union tussen gooi en verder niks verander, klopt het nog niet.

Is het mogelijk ze bij elkaar op te tellen of de 2 uitkomsten naast elkaar te laten zien???

[ Voor 8% gewijzigd door curry684 op 02-04-2004 22:29 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Uh. Je hebt dus 2 queries met identieke velden. Dan werkt dit toch:
SQL:
1
SELECT naam, sum(score) FROM (query1 UNION ALL query2) GROUP BY naam;

:?

Professionele website nodig?


Verwijderd

Topicstarter
curry684 schreef op 02 april 2004 @ 22:25:
Uh. Je hebt dus 2 queries met identieke velden. Dan werkt dit toch:
SQL:
1
SELECT naam, sum(score) FROM (query1 UNION ALL query2) GROUP BY naam;

:?
Maar hoe doe ik dit in sql???

Die weet toch niet dat de bovenste query, query 1 is???

Kan ik dus via sql deze 2 querys optellen?

Dus dat ik 1 query heb, die ze meteen berekent en optelt???

Verwijderd

Topicstarter
Ik heb helaas een foutje gemaakt van de query O-)

Maar de vraag blijft hetzelfde


SELECT g.g_gebruikersnaam AS naam1, COUNT(v.v_eind_team1) AS Score1
FROM gebruikers g, voorspelling v, wedstrijden w
WHERE v.w_id = w.w_id AND g.g_id = v.g_id AND v.v_ronde = 'poule' AND w.w_ronde = 'poulewedstrijden' AND v.v_eind_team1 = w.w_eind_team1 AND v.v_eind_team2 = w.w_eind_team2 AND w.w_winnaar IN ('1', '2', '3')
GROUP BY g.g_gebruikersnaam

SELECT g.g_gebruikersnaam AS naam, COUNT(v.v_eind_team1) AS Score2
FROM gebruikers g, voorspelling v, wedstrijden w
WHERE v.w_id = w.w_id AND g.g_id = v.g_id AND v.v_ronde = 'kwartfinale' AND w.w_ronde = 'kwartfinale' AND v.v_eind_team1 = w.w_eind_team1 AND v.v_eind_team2 = w.w_eind_team2 AND w.w_winnaar IN ('1', '2', '3')
GROUP BY g.g_gebruikersnaam

  • Fludizz
  • Registratie: Mei 2002
  • Niet online
Wat Curry bedoelt is:

code:
1
2
3
SELECT naam, sum(score) 
FROM ( [Voer hier Query1 in] UNION ALL [Voer hier Query2 in] ) 
GROUP BY naam;


Of denk ik de verkeerde kant op Curry?

[ Voor 13% gewijzigd door Fludizz op 02-04-2004 23:35 ]


Verwijderd

De Union plakt de queries aan elkaar.

Als je de resultaten _naast_ elkaar wilt hebben, dus score1 van de eerste query naast score2 van de tweede query, zul je de queries aan elkaar moeten knopen op basis van bijv. de naam.

E.g.

select q1.naam, q1.score1, q2.score2
from
(
SELECT g.g_gebruikersnaam AS naam, COUNT(v.v_eind_team1) AS Score1
FROM gebruikers g, voorspelling v, wedstrijden w
WHERE v.w_id = w.w_id AND g.g_id = v.g_id AND v.v_ronde = 'poule' AND w.w_ronde = 'poulewedstrijden' AND v.v_eind_team1 = w.w_eind_team1 AND v.v_eind_team2 = w.w_eind_team2 AND w.w_winnaar IN ('1', '2', '3')
GROUP BY g.g_gebruikersnaam
) q1,
(
SELECT g.g_gebruikersnaam AS naam, COUNT(v.v_eind_team1) AS Score2
FROM gebruikers g, voorspelling v, wedstrijden w
WHERE v.w_id = w.w_id AND g.g_id = v.g_id AND v.v_ronde = 'kwartfinale' AND w.w_ronde = 'kwartfinale' AND v.v_eind_team1 = w.w_eind_team1 AND v.v_eind_team2 = w.w_eind_team2 AND w.w_winnaar IN ('1', '2', '3')
GROUP BY g.g_gebruikersnaam
) q2
where q1.naam = q2.naam


Succes.

Verwijderd

Topicstarter
Fludizz schreef op 02 april 2004 @ 23:35:
Wat Curry bedoelt is:

code:
1
2
3
SELECT naam, sum(score) 
FROM ( [Voer hier Query1 in] UNION ALL [Voer hier Query2 in] ) 
GROUP BY naam;


Of denk ik de verkeerde kant op Curry?
Het klinkt vij logisch maar krijg ik weer zo'n eror :r

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT g.g_gebruikersnaam AS naam, COUNT( v.v_eind_team1 ) as


Bij alle 2 de oplossingen dezelfde eror dus ook helaas bij die van butcher12 :(
Ik werk via phpmyadmin btw

[ Voor 13% gewijzigd door Verwijderd op 03-04-2004 00:10 ]


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 02 april 2004 @ 23:56:
[...]
Bij alle 2 de oplossingen dezelfde eror dus ook helaas bij die van butcher12 :(
Ik werk via phpmyadmin btw
Dan heb je vast en zeker ook MySQL, en die ondersteunt subqueries voor geen meter :)

Zal eens ff kijken wat ik kan bakken.
Als ik er een union tussen gooi en verder niks verander, klopt het nog niet.
Wat bedoel je hier trouwens mee? :? Wat geeft de union dat voor result set?

[ Voor 21% gewijzigd door curry684 op 03-04-2004 00:59 ]

Professionele website nodig?


Verwijderd

als mysql geen subquery's ondersteund zal die ook geen unions ondersteunen aangezien die ook pas in mysql 4 te gebruiken zijn...

Verwijderd

Topicstarter
Verwijderd schreef op 03 april 2004 @ 09:47:
als mysql geen subquery's ondersteund zal die ook geen unions ondersteunen aangezien die ook pas in mysql 4 te gebruiken zijn...
Ik heb MySQL 4.0.16-nt , die is dan toch goed :?

Verwijderd

Topicstarter
curry684 schreef op 03 april 2004 @ 00:56:
[...]


[...]

Wat bedoel je hier trouwens mee? :? Wat geeft de union dat voor result set?
Als ik er union tussen doe, en niks aan de querys verander.

Krijg ik:

MySQL retourneerde:
#1109 - Unknown table 'v' in order clause

Als ik de query een beetje aanpas dan krijg ik wel resultaat maar dan zet ie van beide scores in 1 tabel.
Heb je van de bovenste query een naam in gebruikersnaam staan en nog een x de naam van de onderste query.
Dan staat er bij de kolom gebruikersnaam
gebruikersnaam score
Jantje 2
Jantje 2

Die moet hij dus optellen :X


SELECT g.g_gebruikersnaam AS naam, COUNT( v.v_eind_team1 ) AS Score1
FROM gebruikers g, voorspelling v, wedstrijden w
WHERE v.w_id = w.w_id AND g.g_id = v.g_id AND v.v_ronde = 'poule' AND w.w_ronde = 'poulewedstrijden' AND v.v_eind_team1 = w.w_eind_team1 AND v.v_eind_team2 = w.w_eind_team2 AND w.w_winnaar
IN ( '1', '2', '3' )
GROUP BY g.g_gebruikersnaam
UNION ALL
SELECT g.g_gebruikersnaam AS naam, COUNT( v.v_eind_team1 ) AS Score1
FROM gebruikers g, voorspelling v, wedstrijden w, teams e, teams t
WHERE v.w_id = w.w_id AND g.g_id = v.g_id AND v.v_ronde = 'kwartfinale' AND w.w_team1 = t.t_pouleteam AND w.w_team2 = e.t_pouleteam AND w.w_ronde = 'kwartfinale' AND v.v_eind_team1 = w.w_eind_team1 AND v.v_eind_team2 = w.w_eind_team2 AND w.w_winnaar
IN ( '1', '2', '3' )
GROUP BY g.g_gebruikersnaam


:X

[ Voor 82% gewijzigd door Verwijderd op 03-04-2004 15:07 ]


Verwijderd

Topicstarter
Is dit uberhaupt mogelijk???????????

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Ja, het is mogelijk : select userid, score1+score2 from tabel,tabel,tabel where <tabellen relatie aan elkaar>

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Topicstarter
dusty schreef op 04 april 2004 @ 16:13:
Ja, het is mogelijk : select userid, score1+score2 from tabel,tabel,tabel where <tabellen relatie aan elkaar>
Het punt is dat hij 2x uit dezelfde kolom moet counten.Maar 2x met een andere WHERE :X
En hij moet dan nog beide waardes bij elkaar optellen :7
Pagina: 1