zapytania sql

0

Majac tabele:
Ksiazki(nrkatalogowy,autor,tytuł,rokwydarzenia)
Studenci(pesel,nazwisko,nrtelefonu)
Wypozyczenia(pesel,nrkatalogowym,datawyp,datazwrotu)
klucz głowny(atrybuty podkreslone) , datawyp not null

Instrukcja ktora podaje liczbe ksiazek ktore zostaly wyporzyczone i nie zostaly oddane

select count(pesel) from wyporzyczenia
where datazwrotu is null;

instrukcja ktora poda nazwiska wszystkich studentow ktorzy wypozyczyli najwiecej ksiazek

select s.nazwisko from studenci s
join wypozyczenia w on s.pesel = w.pesel
where pesel = (select MAX(w.pesel) from wypozyczenia

Instrukcja ktora poda zestawienie wypozyczen w poszczegolnych latach rok_kalendarzowy, ilosc_wypozyczen dla lat z iloscia wypozyczen > 100 uporzadkowane malejaco wedlug roku
tej instrukcji nie rozumiem ..
Prosilbym o sprawdzenie bo cos mi sie wydaje ze rozumowanie jest niepoprawne

2

Myślę, że chodiz o coś takiego:

SELECT year(datawyp) RokWypozyczenia, count(pesel) LiczbaKsiazek
FROM wyporzyczenia
GROUP BY year(datawyp)
HAVING count(pesel) > 100
ORDER BY year(datawyp) desc
3
dcielak napisał(a):

instrukcja ktora poda nazwiska wszystkich studentow ktorzy wypozyczyli najwiecej ksiazek

select s.nazwisko from studenci s
join wypozyczenia w on s.pesel = w.pesel
where pesel = (select MAX(w.pesel) from wypozyczenia

To zapytanie poda ci nazwisko studenta z największym PESELem, który coś wypożyczył (https://www.w3schools.com/sql/sql_min_max.asp).

1

Dla tego przypadku z max. ilością wypożyczeń, ale bez przypadku brzegowego, że każdy student nie wypożyczył książki (wówczas wszyscy się łapią ;-) )

select 
  max(s.nazwisko),
  count(0) ilosc_wypozyczen
from 
  studenci s join wypozyczenia w on s.pesel=w.pesel 
group by 
  s.pesel 
having count(0)=(
  select 
    max(ilsoc_wypozyczen)
  from 
   (select count(0) ilosc_wypozyczen from wypozyczenia group by pesel)
)
0

Pomogłby mi ktoś z tym przykładem ? Nie mam pomysłu jak to ugryzc..

Instrukcja ktora podaje liczbe ksiazek ktore zostaly wyporzyczone i nie zostaly oddane

select count(pesel) from wypozyczenia
where datazwrotu is null;
3

Policz po numerze katalogowy a nie po peselu

0

dziekuję za odpowiedz zatem odpowiedzią jest po prostu: ?

select count(nrkatalogowym) from wypozyczenia
where datazwrotu is null;
0

@dcielak: COUNT jako argument przyjmuje wyrażenie. Takim wyrażeniem może być po prostu 0, 'abc', wartość jakiegoś atrybutu etc. COUNT (0) to zwyczajne lenistwo w pisaniu, w porownaniu do COUNT (nazwisko_studenta).

Co do MAX, to jeśli w zapytaniu używamy grupowania to wartościami jakie mogą się pojawić w result secie są wartości klucza grupowania bądź wartości funkcji grupujacej. Zdaje się, że jeśli klucz grupowania jest kluczem głównym, to można opuścić funkcje agregujaca.

0

Instrukcja ktora podaje liczbe ksiazek ktore zostaly wyporzyczone i nie zostaly oddane
Mogłbym to jeszcze tak napisac ?

select count(nrkatalogowym) from wypozyczenia
where datazwrotu not in (select datazwrotu from wypozyczenia);

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