Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wartosc srednia
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
misty
Witam!
Potrzebuje wyciagnac pewne zapytanie. Nie wiem czy to sie wogole da zrobic na poziomie sql, czy juz powinnam sie tym zajac w skrypcie.
mianowicie chodzi o to:
mam 3 tabele:
  1. t_temperatura (id serial PRIMARY KEY, temperatura double precision NOT NULL, data_id int NOT NULL, godzin_id, FOREIGN KEY(DATA)id) REFERENCES t_data(id) match FULL ON UPDATE cascade ON DELETE restrict, FOREIGN KEY(godzina_id) REFERENCES t_godzina(id) match FULL ON UPDATE cascade ON DELETE restrict);
  2.  
  3. t_data (id serial PRIMARY KEY, DATA date NOT NULL);
  4.  
  5. t_godzina (id serial PRIMARY KEY, godzina varchar NOT NULL);


chodzi o to ze: 3 razy na dobe (o godz 6:00, 14:00 i 22:00) dokonywane sa pomiary temperatury. ale ja nie chce wyciagac wszystkich wartosci, tylko dla kazdego dnia wartosc usredniona. Wynikiem mojego zapytania maja byc wszystkie daty w bazie i dla kazdej daty wartosc srednia temperatury z danego dnia. Nie do konca wiem jak wogole 'ugryzc' to zapytanie. tj. wiem ze do wyciagniecia wartosci sredniej sluzy 'avg' ale jak napisac to zapytanie by nie zrobil mi wartosci sredniej z wszystkich wartosci, tylko by robil avg(temperatura) dla kazdej daty?
jakies sugestie?
Pzdr!
phpion
Hmmm dlaczego nie wstawisz daty i godziny do tabeli t_temperatura? Niepotrzebnie rozbudowujesz strukturę tabeli na 3 tabele. Przy strukturze:
Kod
t_temperatura:
id
temperatura
data
godzina

możesz wykonać takie zapytanie:
  1. SELECT DATA, AVG(temperatura) AS srednia_temperatura FROM t_temperatura GROUP BY DATA

Na Twojej obecnej strukturze również dałoby się to zrobić (odpowiednie złączenia) ale wydaje się to zbyteczne winksmiley.jpg
misty
data jest w osobnej tabeli z racji tego, ze pomiarow jest wiecej (tj. nie tylko temperatura), baza jest zbudowana tak, ze latwiej bylo mi wyciagnac daty do osobnej tabeli poniewaz kilka innych tabel z niej korzysta. wiem ze moglam w kazdej z tych pozostalych tabel dodac kolumne 'data' tak jak zasugerowales, ale sadze ze to powielanie informacji juz w bazie istniejacych, dlatego stworzylam osobna tabele, a te ktore z niej korzystaja odwoluja sie po data_id.
masz wiec moze jakies sugestie dla takiej struktury ?smile.gif

a wiesz co, juz sobie poradzilam:) przerobilam Twoje zapytanie, teraz wyglada tak:
  1. SELECT avg(t_temperatura.temperatura) AS srednia_temperatura, t_data.DATA FROM t_temperatura, t_data WHERE t_temperatura.data_id=t_data.id GROUP BY t_data.DATA;

i smiga:)

dzieki wielkie za pomoc!! smile.gif
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.