[SQL] percentage uitrekenen

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

Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 10-06 22:17
Ik heb in mysql twee tabellendie er zo uitzien:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
tabel: pollOptions

id   int(6)   No    auto_increment  
pollID   mediumint(6)   No  0    
order   int(2)   No  0    
option   varchar(50)   No      
votes   int(6)   No  0    


tabel: poll

id   int(6)   No    auto_increment  
gebruikersID   int(6)   No  0    
vraag   varchar(100)   No


Nu staat er in votes het aantal votes op elke optie van een Poll.

Nu wil ik graag ivm met mijn template systeem zoveel mogelijk in 1 query doen...

Wat ik wil is een percentage per row uitrekenen dat bestaat uit: (vote_van_regel/totaal_aantal_votes)* 100

Ik heb de volgende query bedacht:

code:
1
2
3
4
5
6
7
8
9
10
11
SELECT 
            round((votes/sum(votes))*100) as `percentage`, 
           `option` 
FROM 
           `pollOptions` 
WHERE 
           `pollID` = 1 
GROUP BY 
            'id' 
ORDER BY 
           `order`


In principe werkt deze query prima, maar hij geeft alleen de 1e row terug.

Heeft iemand een idee hoe ik dit kan oplossen?

[ Voor 9% gewijzigd door maartenvdv737 op 12-01-2003 14:48 ]

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • Devil
  • Registratie: Oktober 2001
  • Niet online

Devil

King of morons

maartenvdv schreef op 12 January 2003 @ 14:44:
[knip]
In principe werkt deze query prima, maar hij geeft alleen de 1e row terug.

Heeft iemand een idee hoe ik dit kan oplossen?
Is toch logisch dat als je er WHERE pollID = 1 inzet dat hij dan alleen de eerste row weergeeft :?

(je doet immers group by id ;) )

edit:

oow wacht id natuurlijk != pollId |:(

[ Voor 67% gewijzigd door Devil op 12-01-2003 14:47 ]

After all, we are nothing more or less than what we choose to reveal.


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

moet je hem ook niet groupen op option?

Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 10-06 22:17
Ja, ik heb even de 2e tabel er ook bij gezet, voor de duidelijkheid

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 10-06 22:17
Erkens schreef op 12 January 2003 @ 14:48:
moet je hem ook niet groupen op option?
Als ik dat doe gebeurt hetzelfde.

Ik blijf er iig vrij nuchter onder....


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

maartenvdv schreef op 12 January 2003 @ 14:50:
[...]


Als ik dat doe gebeurt hetzelfde.
code:
1
2
3
4
5
6
7
8
9
SELECT 
            round((votes/sum(votes))*100) as `percentage`, 
           `option` 
FROM 
           `pollOptions` 
WHERE 
           `pollID` = 1 
GROUP BY 
            'option'

zo moet tie toch werken?
edit:
o wacht natuurlijk niet, votes en sum(votes) gaat lastig ;)

code:
1
2
3
4
SELECT round((p.votes/sum(p2.votes))*100) as percentage, p.option
FROM pollOptions AS p, pollOptions AS p2
WHERE p.pollID=1 AND p.pollID=p2.pollID
GROUP BY p.option

[ Voor 29% gewijzigd door Erkens op 12-01-2003 14:57 ]


Acties:
  • 0 Henk 'm!

  • Devil
  • Registratie: Oktober 2001
  • Niet online

Devil

King of morons

Ik denk dat dit niet lukt zonder subquery. Kweenie of mysql dat inmiddels al ondersteund.
Ik zou twee query's gebruiken en php het percentage laten berekenen.

After all, we are nothing more or less than what we choose to reveal.


Acties:
  • 0 Henk 'm!

  • maartenvdv737
  • Registratie: Augustus 2000
  • Laatst online: 10-06 22:17
code:
1
2
3
4
SELECT round((p.votes/sum(p2.votes))*100) as percentage, p.option
FROM pollOptions AS p, pollOptions AS p2
WHERE p.pollID=1 AND p.pollID=p2.pollID
GROUP BY p.option
Gaaf, dit werkt perfect! Daar had ik even niet aan gedacht. Bedankt!

Ik blijf er iig vrij nuchter onder....

Pagina: 1