Problem z group by

0

Witam

Wpisuje takiego selecta:

select p.imie, p.nazwisko, s.srednie_zarobki-avg(s.srednie_zarobki) as POWYZEJ_SREDNIEJ from pracownicy p, stanowiska s where p.stanowisko=s.nazwa group by s.srednie_zarobki

Ale wyskakuje mi komunikat: not a GROUP BY expression

Wyczytałem, że mam dołączyć do GROUP BY selecty, które nie należą jako argument funkcji grupującej czyli wszystkie oprocz s.srednie_zarobki, ale nie wiem za bardzo jak to uczynić.

0

Nie możesz wypisać imienia czy nazwiska skoro wstawiasz funkcję agregującą, bo niby które imie i nazwisko by ci miało tam podać?

0

Nie możesz w jednym zapytaniu sprawdzić, czy jest powyżej średniej - musisz użyć podzapytań. Stwórz sobie podzapytanie, które TYLKO wylicza średni zarobek. Nic więcej. Czyli:

SELECT Avg(srednie_zarobki) as srednia FROM stanowiska

A teraz stwórz prawidłowe zapytanie o pracowników:SELECT p.imie, p.nazwisko, s.srednie_zarobki FROM pracownicy p JOIN stanowiska s ON p.stanowisko=s.nazwa

Teraz aby wyliczyć, czy jest ponad średnią dorzuć sobie do każdego rekordu wartość wyliczoną w pierwszym zapytaniu. Czyli stwórz iloczyn kartezjański obu tych zbiorów.
```sql
SELECT  p.imie, p.nazwisko, s.srednie_zarobki, x.srednia, s.srednie_zarobki-x.srednia As powyzej_sredniej FROM pracownicy p JOIN stanowiska s ON p.stanowisko=s.nazwa, (SELECT Avg(srednie_zarobki) as srednia FROM stanowiska) As X

Oczywiście można to jeszcze na kilka innych sposobów zrobić...

pozdrawiaMM

0

ech...

SELECT p.imie, p.nazwisko, s.srednie_zarobki-avg(s.srednie_zarobki) AS POWYZEJ_SREDNIEJ FROM pracownicy p, stanowiska s WHERE p.stanowisko=s.nazwa GROUP BY p.imie, p.nazwisko
0

ech...
MS SQL:
Msg 8120, Level 16, State 1, Line 1
Column 'stanowiska.srednie_zarobki' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
MS Access:
Próba wykonania kwerendy, która nie zawiera podanego wyrażenia 's.srednie_zarobki-avg(s.srednie_zarobki)' jako elementu funkcji agregującej. (Błąd 3122)
PostgreSQL:
ERROR: column "s.srednie_zarobki" must appear in the GROUP BY clause or be used in an aggregate function
Stan SQL:42803
MySQL wykonał, ale zwrócił głupoty (same 0)

0
  1. przyjmijmy, że mysql nie jest bazą danych :p
SELECT p.imie, p.nazwisko, s.srednie_zarobki - (SELCT avg(srednie_zarobki) FROM stanowiska) AS POWYZEJ_SREDNIEJ FROM pracownicy p, stanowiska s WHERE p.stanowisko=s.nazwa

(nie zauważyłem tam tego odejmowania)
Chociaż pojęcia nie mam co by to miało zwracać bo poza faktem iż się wykona to nie wiem co to komu da. Podejrzewam że zadanie jest trochę inne od tego zapytania ale to tylko można gdybać

1 użytkowników online, w tym zalogowanych: 0, gości: 1