2012-06-25 16 views
7

Dobra, więc mam tabelę użytkowników i chciałbym uzyskać maksymalną wartość dla użytkownika z największą ilością punktów podzieloną przez wynik. Poniżej znajduje się szorstki pomysł co szukam:Jak sumować i dzielić w MySql

SELECT MAX(SUM(points)/SUM(score)) FROM users 

Nie jestem zainteresowany sumowaniu obu kolumnach i dzieląc, raczej jestem zainteresowany podział punktów i zdobyć dla każdego użytkownika i pobrać najwyższą wartość z partii.

+4

Czy SELECT MAX (punkty/punkty) od użytkowników nie działa? – thesunneversets

Odpowiedz

3

Może to zrobić z podzapytania:

Select max(points_over_Score) 
from 
    (Select points/score AS points_over_score 
    from users); 

I jak thesunneversets wymienionych w komentarzu, które prawdopodobnie mogą być skrócone do

SELECT MAX(points/score) FROM users; 

pan pisemny opis tego, co” próba zrobienia nie wyjaśnia, dlaczego twój przykład ma w nim SUM, więc go nie użyłem.

Również pytania kodowe, takie jak ten, są bardziej odpowiednie dla stackoverflow.com. Możesz zgłosić własne pytanie, aby poprosić moderatora o przeniesienie go.

+0

Właściwie to działało idealnie. Pomyślałem, że doda zarówno punkty, jak i wynik (jak we WSZYSTKICH punktach i wynikach), a następnie odejdzie stamtąd, ale wydaje się, że robi to tak, jak chciałem. Ostatnie pytanie: jak mogę uzyskać wartość w postaci dziesiętnej (jeśli liczba jest wyświetlana z kropką dziesiętną?) –

+0

@Nick: Co działało idealnie? – FrustratedWithFormsDesigner

+0

Wysłane zapytanie działało dokładnie tak, jak chciałem. Mówiłem, że myślę, że takie zapytanie spowodowałoby dodanie obu kolumn i zwrócenie wyniku dzielenia punktów przez wynik, zamiast zwracania najwyższych punktów/punktów. Teraz po prostu potrzebuję go, więc jeśli wynik jest dziesiętny, wróci jako dziesiętny, a nie zaokrąglony. –

0

Odpowiedź FrustratedWithFormsDesigner nie zadziała, jeśli trzeba podsumować wszystkie punkty, następnie wszystkie wyniki, a następnie podzielić oba. Ta odpowiedź dzieli każdy punkt przez wynik, a następnie zwraca najwyższą odpowiedź.

To powinno działać:

SELECT MAX(sum_points/sum_score) from 
(SELECT SUM(points) as sum_points, SUM(score) as sum_score FROM users) 

BTW, to zwraca "nietypowe" procent. Prawdopodobnie chcesz podzielić wynik punkt po punkcie. Na przykład, jeśli otrzymasz 70 na 100, czyli 70% lub wynik (70)/punktów (100).