sorteren na een berekening

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

Koen B

Koen B

11/01/2009 16:20:00
Quote Anchor link
Hallo,

ik heb voor het sellecteren van gegevens uit de database de volgende query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?
$query
= "SELECT id,player,SUM(ping),SUM(times), COUNT(player) FROM avarages WHERE player LIKE '%$search%' $server_select GROUP BY `player` ORDER BY `avarages`.`$order` $asc LIMIT $limit";
?>


het gaat hierbij om GROUP bij `player`
Een speler kan meerdere keren voorkomen in de database
Ik wil de gemiddelde ping van een speler krijgen, en deze word gerekend door (ping1 * times1) + (ping2 * times2) ect / times total

Als ik nu wil sorteren op de ping van een speler sorteert hij verkeerd: ORDER BY `avarages`.`ping` want hij pakt dat de laagste ping van een speler, terwijl als deze meerdere keren in een group kan voorkomen zijn ping misschien wil hoger is?

Ik wil dus kunnen sorteren nadat ik de totale ping heb berekend binnen een GROUP? Kan dit?

Mvg, Koen
 
PHP hulp

PHP hulp

18/12/2024 04:25:47
 
Joren de Wit

Joren de Wit

11/01/2009 16:34:00
Quote Anchor link
koen schreef op 11.01.2009 16:20:
Ik wil de gemiddelde ping van een speler krijgen, en deze word gerekend door (ping1 * times1) + (ping2 * times2) ect / times total
Dat is toch hetzelfde als AVG(ping) * AVG(times) voor elke speler? Dus:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
  player,
  AVG(ping) * AVG(times) AS average
FROM
  averages
GROUP BY
  player

Let er ook nog even op dat jouw oorspronkelijke query niet geldig is. In de GROUP BY moet je namelijk alle kolommen op nemen die in de SELECT voorkomen en geen onderdeel zijn van een aggregate functie. In jouw eerste query zijn dat dus id en player.

ps. Verder kun je zodra je groepeert op de spelers, niet meer sorteren op de verschillende records van een bepaalde speler. Door de GROUP BY zijn die nu samen gevoegd tot 1 groep en daar kun je geen specifieke records meer uit halen. Je kunt enkel nog gegevens over die gehele groep bepalen.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Koen B

Koen B

11/01/2009 16:46:00
Quote Anchor link
nee dit is niet hetzelfde, want ping1 van 50 komt 100 keer voor en ping2 van 10 komt 10 keer voor. Het gemiddelde is dan: (50*100) + (10*10) / 60
Wat jij doet is (50+10/2)*(100+10/2)

Kan ik hierop wel sorteren?
AVG(ping) * AVG(times) AS average
 
Joren de Wit

Joren de Wit

11/01/2009 16:56:00
Quote Anchor link
koen schreef op 11.01.2009 16:46:
nee dit is niet hetzelfde
In dat geval moet dit volgens mij ook wel werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
  player,
  AVG(ping * times) AS average
FROM
  averages
GROUP BY
  player

En ja, je kunt gewoon op 'average' sorteren...
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.