Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] problem ze średnią AVG
MitS
post 15.07.2009, 09:54:55
Post #1





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

Ostrzeżenie: (0%)
-----


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ć?

Ten post edytował MitS 15.07.2009, 10:15:01
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
skowron-line
post 15.07.2009, 09:57:09
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


  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

Ten post edytował skowron-line 15.07.2009, 10:01:36


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
MitS
post 15.07.2009, 10:13:50
Post #3





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

Ostrzeżenie: (0%)
-----


Fakt o FROM zapomniałem już poprawiłem ale co ma do tego join ?
Go to the top of the page
+Quote Post
skowron-line
post 15.07.2009, 10:16:44
Post #4





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


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.

Ten post edytował skowron-line 15.07.2009, 10:17:10


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
MitS
post 15.07.2009, 10:26:30
Post #5





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

Ostrzeżenie: (0%)
-----


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'.
Go to the top of the page
+Quote Post
skowron-line
post 15.07.2009, 10:34:00
Post #6





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


  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.


--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
viking
post 15.07.2009, 10:38:42
Post #7





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


AVG jest jaką funkcją? Agregującą. Co w takim wypadku używamy? GROUP BY. Taki też błąd dostałeś.


--------------------
Go to the top of the page
+Quote Post
Weirdo
post 20.07.2009, 20:35:01
Post #8





Grupa: Zarejestrowani
Postów: 16
Pomógł: 2
Dołączył: 30.05.2009

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 23:40