Wpis z mikrobloga

#naukaprogramowania #bazydanych
uczę się #mariadb #sql
mam za zadanie wyświetlić nazwiska pracowników, których suma wypłat jest większa od pracownika o nazwisku 'misiura'

tabela z pracownikami łączy się po kluczu nrprac z tabelą z wypłatami.
Obecnie mam coś takiego:

SELECT nazwisko, SUM(kwota) FROM pracownicy
INNER JOIN wyplaty USING(nr
prac)
GROUP BY nazwisko
HAVING SUM(kwota) > ..........;

Da się w miejscu kropek wstawić jakoś warunek zarobków większych od misiury?
Jedyne co mi przychodzi do głowy, to zrobić całe kolejne podzapytanie, ale myślę czy nie będzie jakiejś szybszej opcji, bo wykonanie całego podzapytania wydaje się wolne, i pamięciożerne
  • 11
@nietrolluje:

SELECT nazwisko, SUM(kwota) FROM pracownicy
INNER JOIN wyplaty USING(nr_prac)
GROUP BY nazwisko
HAVING SUM(kwota) > (SELECT SUM(kwota) FROM pracownicy
INNER JOIN wyplaty USING(nr_prac)
WHERE nazwisko='misiura');

to działa, ale to o co pytam brzmi jak coś, na co jest wbudowana, szybsza funkcja
@LazyInitializationException: jak dobrze rozumiem, do tego podzapytania jest wykonywane takie samo łączenie tabel jakie wykonałem wcześniej, czyli 2 razy robię tą samą operacje, która wydaje się być dosyć kosztowna, a jednocześnie samo zadanie które próbuję wykonać wydaje się tak "oczywistą operacją" że myślałem że jest na to wbudowane narzędzie, np jakiś dodatkowy warunek do funkcji SUM
@RedveKoronny: imho nie pisz joinów przy pomocy słowa using - nikt tak nie pisze w branży, bo lekko trudniej się czyta takie joiny

poza tym, nie grupuj po nazwisku - jeśli byś miał dwóch Kowalskich to ich wypłaty byłyby zsumowane :)
w przypadku Misiury musimy jednak założyć, że jest taki tylko jeden - inaczej trzeba by lekko zmodyfikować treść zadania

ja bym zrobił takie zapytanie:

with kwoty as (
select
nr_prac