Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: AVG(wartosc) ostatnich 5-ciu rekordów
Forum PHP.pl > Forum > Bazy danych
tmk
Mam w tabeli ok 100 rekordów, jak pobrać wartość średnią z ostatnich 5-ciu?
wartość średnia ze wszystkich to:
  1. SELECT AVG(wartosc)
  2. FROM nazwa_tabeli


ale jak tylko z wybranych ją policzyć?
mike
  1. SELECT AVG(value)
  2. FROM TABLE ORDER BY id DESC LIMIT 5
tmk
to zapytanie bieże średnią ze wszystkich rekordów. Daje efekt taki sam, jak to, które podałem w pierwszym poście
TomASS
tmk: masz rację. Kiedyś miałem taki sam problem.
Spróbuj przeczytać to.
tmk
OK, kapuje, muszę użyć GROUP BY. U mnie rolę id odgrywa data(PRIMARY)

Wpadło mi więc do głowy takie zapytanie:
  1. SELECT DATA, AVG(wartosc) AS avg_5
  2. FROM nazwa_tabeli WHERE (jakis dodatkowy warunek) GROUP BY DATA ORDER BY 1 DESC LIMIT 5"

ale niestetety, pokazuje mi złą wartość średnią-czyli nie liczy jej z ostatnich 5-ciu rekordów
dr_bonzo
Podzapytania rox!
  1. SELECT AVG( wartosc )
  2. FROM ( SELECT wartosc
  3. FROM tabela ORDER DATA DESC LIMIT 5 ) AS tempName


kod nie sprawdzany, ale bledy jesli sa to tylko skladniowe.
Najpierw wybierasz ostatnie 5 elementow, a potem z tego liczysz srednia.
tmk
a czy baza MySQL zezwala na zagnieżdżone zapytania? wydaje mi się że nie...

----UPDATE

sprawdziłęm, nie wolno stosować zagnieżdżonych zapytań w MySQL'owej bazie
Kinool
w wersji 5.x chyba wolno smile.gif
tmk
ale na serwerze na którym chcę to zrealizować jest MySQL 4.0.23, bez możliwości Upgrade'u bazy
mike
1.
Cytat(tmk @ 2005-08-30 13:14:29)
sprawdziłęm, nie wolno stosować zagnieżdżonych zapytań w MySQL'owej bazie
Podzapytania są już w wersji 4.1.

2.
W takim wypadku musisz zrobić tak: 1. Pobrać wiersze które Cię interesują 2. Wyliczyć średnią po stronie php.
dr_bonzo
Cytat
czy baza MySQL zezwala na zagnieżdżone zapytania? wydaje mi się że nie...

Nie pisales o jaka baze chodzi (temat umiesciles w podforum: Bazy danych) to nie umieszczalem info o dostepnosci podzapytan w mysql'u.

Cytat
W takim wypadku musisz zrobić tak: 1. Pobrać wiersze które Cię interesują 2. Wyliczyć średnią po stronie php.

Tak, to tylko 5 rekordow wiec nie poczujesz roznicy w szybkosci wykonania tych obliczen miedzy php a mysql'em.
tmk
Hmm, a jeśli mam robić obliczanie średniej dla ostatnich: 5, 10, 15, 25, 45 i 100 rekordów, to lepiej zrobić dla każdego oddzielny SELECT(limit 5 , limit 10 itp..) czy zrobić jeden SELECT z LIMIT 100 , stablicować i te pozostałe średnie liczyć już na tablicy?
Takie obliczenia będę wykonywane ok 200 razy.

chodzi mi raczej o nie-zakatowanie serwera niż szybkości działania
SongoQ
Wszystko zalezy od ilosci rekordow. Najlepiej samemu jest napisac i przetestowac.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.