poprawienie zapytań z mojej pracy domowej

0

Cześć. Słuchajcie mam problem z zadaniami.

**To są moje rozwiązania ale one nie zabardzo pokazują mój oczekiwany wynik. POMOCY PROSZĘ !!

3.CREATE VIEW nieoplacone_faktury
AS
SELECT k.imie, k.nazwisko, COUNT(f.id_faktura)
FROM klient k JOIN faktura f
ON k.id_klient=f.id_klient
GROUP BY k.imie, k.nazwisko
HAVING COUNT (f.czy_oplacona)>=0;

1.SELECT k.imie, k.nazwisko, COUNT(u.id_zamowienie)
FROM klient k JOIN koszyk u
ON k.id_klient=u.id_zamowienie
GROUP BY k.imie, k.nazwisko
ORDER BY nazwisko ASC, imie ASC;**
  1. Oblicz ile jest produktów w każdej kategorii.
    2.Dla każdego klient oblicz ile musiał zapłacić za wszystkie zamówienia
    3.Stwórz widok , który dla każdego klienta wypisze informacje ile ma nieopłaconych faktur i na jaką kwotę
  2. Znajdź klientów dla których łaczna suma wszystkich zamówień przekracza 10 tys zł.

Tworzenie bazy

USE sklep
GO

CREATE TABLE adres (
  id_adres INTEGER NOT NULL PRIMARY KEY,
  ulica VARCHAR(50) NOT NULL,
  numer VARCHAR(10) NOT NULL,
  kod VARCHAR(20) NOT NULL,
  miejscowosc VARCHAR(20) NOT NULL
);
GO

CREATE TABLE klient (
  id_klient INTEGER NOT NULL PRIMARY KEY,
  id_adres INTEGER NOT NULL REFERENCES adres(id_adres),
  imie VARCHAR(20) NOT NULL,
  nazwisko VARCHAR(20) NOT NULL,
  nip CHAR(11) NOT NULL,
  telefon VARCHAR(20) NOT NULL,
  email VARCHAR(30) NOT NULL,
  haslo VARCHAR(30) NOT NULL,
  rabat INTEGER NOT NULL DEFAULT 0,
  data_dodania DATE NOT NULL
);
GO
CREATE TABLE kategoria (
  id_kategoria INTEGER NOT NULL PRIMARY KEY,
  nazwa VARCHAR(20) NOT NULL
);
GO

GO
CREATE TABLE podkategoria (
  id_podkategoria INTEGER NOT NULL PRIMARY KEY,
  id_kategoria INTEGER NOT NULL REFERENCES kategoria(id_kategoria),
  nazwa VARCHAR(20) NOT NULL
);
GO
CREATE TABLE pracownik (
  id_pracownik INTEGER NOT NULL PRIMARY KEY,
  id_adres INTEGER NOT NULL REFERENCES adres(id_adres),
  imie VARCHAR(20) NOT NULL,
  nazwisko VARCHAR(20) NOT NULL
);
GO
CREATE TABLE producent (
  id_producent INTEGER NOT NULL PRIMARY KEY,
  id_adres INTEGER NOT NULL REFERENCES adres(id_adres),
  nazwa VARCHAR(20) NOT NULL
);
GO
CREATE TABLE produkt (
  id_produkt INTEGER NOT NULL PRIMARY KEY,
  id_producent INTEGER NOT NULL REFERENCES producent(id_producent),
  id_podkategoria INTEGER NOT NULL REFERENCES podkategoria(id_podkategoria),
  nazwa VARCHAR(20) NOT NULL,
  opis VARCHAR(20) NOT NULL,
  cena_netto INTEGER NOT NULL,
  podatek INTEGER NOT NULL,
  ilosc_sztuk_magazyn INTEGER NOT NULL DEFAULT 0
);
GO
CREATE TABLE status (
  id_status INTEGER NOT NULL PRIMARY KEY,
  nazwa VARCHAR(50) NOT NULL,
  opis VARCHAR(50) NOT NULL
);
GO
CREATE TABLE zamowienie (
  id_zamowienie INTEGER NOT NULL PRIMARY KEY,
  id_pracownik INTEGER NOT NULL REFERENCES pracownik(id_pracownik),
  id_klient INTEGER NOT NULL REFERENCES klient(id_klient),
  data_zamowienia DATE NOT NULL
);
GO
CREATE TABLE koszyk (
  id_produkt INTEGER NOT NULL REFERENCES produkt(id_produkt),
  id_zamowienie INTEGER NOT NULL REFERENCES zamowienie(id_zamowienie),
  cena_netto INTEGER NOT NULL,
  podatek INTEGER NOT NULL,
  ilosc_sztuk INTEGER NOT NULL DEFAULT 0,
  PRIMARY KEY(id_produkt, id_zamowienie)
);
GO
CREATE TABLE zamowienie_status (
  id_zamowienie INTEGER NOT NULL REFERENCES zamowienie(id_zamowienie),
  id_status INTEGER NOT NULL REFERENCES status(id_status),
  data_zmiany_statusu DATE NOT NULL,
  uwagi VARCHAR(20) NULL,
  PRIMARY KEY(id_zamowienie, id_status)
);
GO
CREATE TABLE faktura (
  id_faktura INTEGER NOT NULL PRIMARY KEY,
  id_zamowienie INTEGER NOT NULL REFERENCES zamowienie(id_zamowienie),
  id_klient INTEGER NOT NULL REFERENCES klient(id_klient),
  id_pracownik INTEGER NOT NULL REFERENCES pracownik(id_pracownik),
  nr_faktury VARCHAR(20) NOT NULL,
  data_wystawienie DATE NOT NULL,
  data_platnosci DATE NOT NULL,
  czy_oplacona INTEGER NOT NULL DEFAULT 0
);
GO
0

add 1
ale o co chodzi? umie czytać ze zrozumieniem? czamu zliczasz zamówienia? chyba że źle coś ponumerowałeś
musisz połączyć kategorie z podkategorią z produktami i zliczyć produkty grupując po kategorii

add 3
pole czy_oplacona sugeruje że jeśli równe 0 tzn. że faktura jest nieopłacona, a tylko takie cię interesują
czyli:

  • wybierasz wszystki nieopłacone faktury
  • aby dostać wartość faktury musisz połączyć się z zamówienie i koszyk, grupujesz po id_faktura i wyliczasz wartość faktury
  • grupujesz po kliencie i sumujesz wartość faktur oraz zliczasz ich liczbę
  • to co otrzymałeś powyżej łączysz (left join'em) z listą użytkowników. Jeśli są tacy którzy nie mają nieopłaconych faktur, to nie dołączysz żadnyego rekordu do nich, czyli suma faktur oraz ich liczba będą null, liczbę faktór w tym przypadku należało by zastąpić zerem
0

Zrobiłem tak. Sume tych faktur mi wyświetla ale nie wiem jak zrobić żeby wyśiwetliło mi tą ilość tych faktur które nie zostały opłacone

DROP VIEW ile;
CREATE VIEW ile
AS SELECT k.imie, k.nazwisko, COUNT(f.czy_oplacona) AS "ilosc", COALESCE(SUM(o.cena_netto),0) AS suma
FROM klient k JOIN zamowienie z ON k.id_klient=z.id_klient
FULL JOIN koszyk o ON z.id_zamowienie=o.id_zamowienie
FULL JOIN faktura f ON k.id_klient=f.id_klient
GROUP BY f.id_faktura, k.imie, k.nazwisko;
GO
SELECT * FROM ile WHERE ilosc=0;

0

TKa samo czy mógłbyś sprawdzić czy te 4 dobrze zrobiłem

SELECT k.imie, k.nazwisko, SUM(o.cena_netto) AS suma
FROM klient k JOIN zamowienie z ON k.id_klient=z.id_klient
FULL JOIN koszyk o ON z.id_zamowienie=o.id_zamowienie
GROUP BY k.imie, k.nazwisko, z.id_klient
HAVING SUM (o.cena_netto)>=10000
ORDER BY imie ASC;

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