Proste zapytanie SELECT

0

Na ćwiczeniach z baz danych mamy taką o to bazę danych:

CREATE TABLE wydawnictwo(
    id_wydawnictwo NUMBER(10) CONSTRAINT wydawnictwo_pk PRIMARY KEY,
    nazwa VARCHAR2(20) CONSTRAINT wydawnictwo_nazwa_u UNIQUE,
    ulica VARCHAR2(30),
    nr_domu VARCHAR2(8),
    nr_lokalu VARCHAR2(4),
    kod_pocztowy VARCHAR2(6),
    poczta VARCHAR2(20)
)
/
--
CREATE TABLE ksiazka(
    id_ksiazka NUMBER(6) CONSTRAINT ksiazka_pk PRIMARY KEY,
    tytul VARCHAR2(30) CONSTRAINT ksiazka_tytul_nn NOT NULL
)
/
--
CREATE TABLE autor(
    id_autor NUMBER(6) CONSTRAINT autor_pk PRIMARY KEY,
    nazwisko VARCHAR2(20) CONSTRAINT autor_nazwisko_nn NOT NULL,
    imie VARCHAR2(20) CONSTRAINT autor_imie_nn NOT NULL
)
/
-- 
CREATE TABLE autor_ksiazki(
    waznosc NUMBER(2),
--  najwazniejszy autor ma waznosci o wartosci 1, kolejny 2, itd.
    id_ksiazka NUMBER(6) CONSTRAINT ak_ksiazka_fk REFERENCES ksiazka(id_ksiazka),
    id_autor NUMBER(6) CONSTRAINT ak_autor_fk REFERENCES autor(id_autor),
    CONSTRAINT ak_pk PRIMARY KEY (id_ksiazka, id_autor)
)
/
--
CREATE TABLE egzemplarz(
    id_egzemplarz NUMBER(6) CONSTRAINT egzemplarz_pk PRIMARY KEY,
    id_ksiazka NUMBER(6) CONSTRAINT egzemplarz_ksiazka_fk REFERENCES ksiazka(id_ksiazka),
    id_wydawnictwo NUMBER(6) CONSTRAINT egzemplarz_wydawnictwo_fk REFERENCES wydawnictwo(id_wydawnictwo),
--  informacja o wydaniu moze byc przedstawiona w postaci oddzielnej relacji
    rok_wydania NUMBER(4) CONSTRAINT egzemplarz_rok_wydania_nn NOT NULL,
--  stan = 0 oznacza, ze dany egzemplarz jest wypozyczony
--  stan = 1 oznacza, ze dany egzemplarz jest dostepny
--  informacje o stanie egzemplarza mozna takze uzyskac na podstawie wypozyczen
    stan NUMBER(1) DEFAULT 1 CONSTRAINT egzemplarz_stan_ck CHECK (stan = 0 OR stan = 1)
)
/
--
CREATE TABLE pracownik(
    id_pracownik NUMBER(6) CONSTRAINT pracownik_pk PRIMARY KEY,
    nazwisko VARCHAR2(20) CONSTRAINT pracownik_nazwisko_nn NOT NULL,
    imie VARCHAR2(20) CONSTRAINT pracownik_imie_nn NOT NULL,
    wynagrodzenie NUMBER(8,2) DEFAULT(10000),
--  wszystkie mozliwe stanowiska moga byc przechowywany w postaci oddzielnej relacji
    stanowisko VARCHAR2(20) DEFAULT 'Bibliotekarz'
)
/
--
CREATE TABLE faktura(
    id_faktura NUMBER(6) CONSTRAINT faktura_pk PRIMARY KEY,
    id_wydawnictwo NUMBER(10) CONSTRAINT faktura_wydawnictwo_fk REFERENCES wydawnictwo(id_wydawnictwo),
    id_pracownik NUMBER(6) CONSTRAINT faktura_pracownik_fk REFERENCES pracownik(id_pracownik),
    data date DEFAULT(sysdate)
--  faktura moze zawierac takze informacje o sumie
)
/
--
CREATE TABLE pozycja_faktury(
    id_pozycja_faktury NUMBER(4) CONSTRAINT pf_pk PRIMARY KEY,
--  jezeli jak klucz glowny zostaloby uzyte (id_faktura, id_ksiazka)
--  to na jednej fakturze moglibysmy miec tylko jedno wydanie danej ksiazki
    id_faktura NUMBER(6) CONSTRAINT pf_faktura_fk REFERENCES faktura(id_faktura),
    id_ksiazka NUMBER(6) CONSTRAINT pf_ksiazka_fk REFERENCES ksiazka(id_ksiazka),
    rok_wydania NUMBER(6) CONSTRAINT pf_rok_wydania_nn NOT NULL,
    ilosc NUMBER(6) CONSTRAINT pf_ilosc_nn NOT NULL,
    cena NUMBER(8,2) CONSTRAINT pf_cena_nn NOT NULL
)
/   
--
CREATE TABLE czytelnik(
    id_czytelnik NUMBER(10) CONSTRAINT czytelnik_pk PRIMARY KEY,
    nazwisko VARCHAR2(30) CONSTRAINT czytelnik_nazwisko_nn NOT NULL,
    imie VARCHAR2(30) CONSTRAINT czytelnik_imie_nn NOT NULL,
    ulica VARCHAR2(30),
    nr_domu VARCHAR2(8),
    nr_lokalu VARCHAR2(4),
    kod_pocztowy VARCHAR2(6),
    poczta VARCHAR2(20)
)
/
--
CREATE TABLE wypozyczenie(
    id_wypozyczenie NUMBER(10) CONSTRAINT wypozyczenie_pk PRIMARY KEY,
    id_czytelnik NUMBER(10) CONSTRAINT wypozyczenie_czytelnik_fk REFERENCES czytelnik(id_czytelnik),
    id_egzemplarz NUMBER(6) CONSTRAINT wypozyczenie_egzemplarz_fk REFERENCES egzemplarz(id_egzemplarz),
-- Pracownik wypozyczajacy ksiazke
    id_pracownik_wyp NUMBER(6) CONSTRAINT wypozyczenie_pracownik_wyp_fk REFERENCES pracownik(id_pracownik),
    data_wypozyczenia date DEFAULT(sysdate),
-- Pracownik przyjmujacy zwracana ksiazke
    id_pracownik_zwr NUMBER(6) CONSTRAINT wypozyczenie_pracownik_zwr_fk REFERENCES pracownik(id_pracownik),
    data_zwrotu date DEFAULT(NULL)
)
/

Do wykonania jest 9 zadań - wszyskie odnośnie SELECT'a. Z jednym sobie nie mogę poradzić:

Wyświetl identyfikatory autorów, których liczba egzemplarzy posiadanych książek jest większa od
dwóch.

Do tej pory próbowałem tak:

--zle
SELECT autor_ksiazki.id_autor, count(*) ilosc FROM egzemplarz, autor_ksiazki
WHERE (egzemplarz.id_ksiazka = autor_ksiazki.id_ksiazka)
GROUP BY egzemplarz.id_ksiazka
HAVING count(egzemplarz.id_ksiazka) > 2;

Ale pojawia się błąd z GROUP BY. Czy mógłbym prosić o podpowiedzi?

1

do group baja daj autora

0

Dzięki, działa. Że ja o tym nie pomyślałem...

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