Cum să includeți o coloană în rezultatele de rezultate fără a le include în grup prin clauză sau să efectuați agregări pe aceasta?

Având în vedere o listă care conține City, EmpName și Salary, sortată după oraș și EmpName, cum să obțineți fiecare EmpName și Salariu cu totalul Salariului pe Oras?

Iată ce am:

selectați EmpName, suma (Salariu) din grupul de tabele după provincie;

Dar îmi dă eroare, deoarece nu am inclus EmpName în grup prin clauză și/sau nu efectuez nici o agregare pe ea. Cum pot obține rezultatele dorite? Orice ajutor?

0
Dar trebuie să afișez și EmpName
adăugat autor Lovena Sunny, sursa
SUM este o funcție de agregare, care face ca coloanele care nu sunt agregate să fie grupate de .
adăugat autor BeemerGuy, sursa
Modificați selecția la "selectați provincia, sumă (Salariu)".
adăugat autor Gordon Linoff, sursa
Vedeți răspunsul de mai jos:
adăugat autor Gordon Linoff, sursa
Sunt curios. De ce vrei suma și nu media?
adăugat autor Gordon Linoff, sursa

2 răspunsuri

Dacă, ceea ce doriți, este suma salariului din oraș pentru fiecare angajat, atunci aveți două opțiuni. Primul ar trebui să funcționeze în aproape orice bază de date:

select EmpName, tcity.CitySalary
from t join
     (select City, sum(Salary) as CitySalary
      from t
      group by city
     ) tcity
     on tcity.city = t.city

A doua modalitate este de a utiliza o funcție de fereastră. În special, acest lucru nu funcționează pe mysql:

select EmptName, sum(salary) over (partition by city)
from t
0
adăugat
Funcția de fereastră într-adevăr este o modalitate de a merge aici dacă RDBMS-ul dvs. o acceptă.
adăugat autor cairnz, sursa
SELECT t.City, t.EmpName, t.Salary, x.city_salary
FROM   table t,
       (SELECT City, SUM(Salary) as city_salary
        FROM   table
        GROUP BY City) x
WHERE x.city = t.city;
0
adăugat