Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] problem ze średnią AVG
Forum PHP.pl > Forum > Bazy danych
MitS
Witam serdecznie mam sobie taką tabelkę:

  1. CREATE TABLE companies(
  2. idCompany INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. person INT(11) UNSIGNED NOT NULL,
  4. umowa ENUM('z', 'p') NOT NULL,
  5.  
  6. PRIMARY KEY(person),
  7. INDEX companiesFK1(person),
  8. FOREIGN KEY(person)
  9. REFERENCES persons(person) ON DELETE CASCADE ON UPDATE CASCADE
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


i nie wiem jakim zapytaniem mógłbym wyliczyć średnią idCompany gdzie umowa = 'z' oraz gdzie umowa = 'p'
Próbowałem tak:

  1. SELECT AVG(COUNT(*)) AS srednia FROM companies WHERE umowa = 'z';


ale coś nie wychodzi wywala błąd:
  1. #1111 - Invalid use of group function


macie pomysł jak to można wykonać?
skowron-line
  1. SELECT AVG(idCompany) AS srednia WHERE umowa = 'z';


W powyższym zapytaniu brakuje
a - FROM
b - SELECT
c - JOIN

poprawną odpowiedz napewno sam wskażesz.

Olsztyn górą ( Dworcowa ) smile.gif
MitS
Fakt o FROM zapomniałem już poprawiłem ale co ma do tego join ?
skowron-line
Cytat(MitS @ 15.07.2009, 09:13:50 ) *
Fakt o FROM zapomniałem już poprawiłem ale co ma do tego join ?

To był ironiczny konkurs a JOIN jest odpowiedzią która ewidentnie niepasuje, nie chciałem żebyś się pomylił smile.gif.
MitS
rozumiem w każdym razie nie działa nadal :/

chociażby dla przykładu gdy w tabeli jest 10 wpisów z czego 6 wpisów ma nasze 'z' tak więc wynikiem powinna być średnia wpisów posiadających literkę 'z'.
skowron-line
  1. SELECT AVG( ( SELECT count( idCompany ) FROM companies WHERE umowa = "z" ) ) AS srednia FROM companies WHERE umowa = 'z';

* pisane z palca
w każdym razie powinno być podzapytanie.
viking
AVG jest jaką funkcją? Agregującą. Co w takim wypadku używamy? GROUP BY. Taki też błąd dostałeś.
Weirdo
Cytat
SELECT AVG(COUNT(*)) AS srednia FROM companies WHERE umowa = 'z';

Cytat
wynikiem powinna być średnia wpisów posiadających literkę 'z'



Jakim cudem? Pomyśl najpierw, zanim coś napiszesz.
Cytat
SELECT COUNT(*) AS srednia FROM companies WHERE umowa = 'z';


To Ci zwraca jeden wiersz - liczbę osób z umową "z". Skoro masz jedną liczbę, jakim cudem chcesz z tego robić średnią?
Jeżeli chcesz pogrupować np. wg firmy i uzyskać średnią na firmę, no to dodaj GROUP BY.

Na początek więcej myśleć, przeczytać choćby podstawowy kurs SQLa.

EOT.
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.