• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyciąganie Max z count(*) Postgresql

Object Storage Arubacloud
0 głosów
239 wizyt
pytanie zadane 25 maja 2022 w SQL, bazy danych przez Martita Bywalec (2,470 p.)
edycja 26 maja 2022 przez Martita

POSTGRESQL

Jestem początkująca z baz danych i proszę o pomoc. Szukałam i nie znalazłam.

Z poniższej tabeli mam utworzyć funkcje MAX z kolumny Największa ilość wypożyczeń, ale ma pokazywać tylko 1 rekord z 3 kolumnami. Oprócz kolumny Największa ilość wypożyczeń ma być kolumna województwo i liczba_wypożyczeń.
Na czerwono zaznaczyłam jaki wynik powinien się pokazać oczywiście z nagłówkami kolumn. Ramka na czerwono pokazuje rekord, który ma mi się wyświetlić jako gotowy wynik.

SELECT województwo,liczba_wypozyczen,
	MAX(czytelnik)
	AS "Największa ilość wypożyczeń"
	FROM
	(
		SELECT województwo,liczba_wypozyczen,
		COUNT(*)
		AS "czytelnik"
		FROM czytelnik
		GROUP BY województwo,liczba_wypozyczen
	)czytelnik
GROUP BY województwo,liczba_wypozyczen;

Poniższy kod wyciągnął mi z tabeli powyższej funkcje max, ale nie pokazał mi całego rekordu.

SELECT
MAX(czytelnik)
AS "Największa ilość wypożyczeń"
FROM
(
    SELECT województwo,liczba_wypozyczen,
    COUNT(*)
    AS "czytelnik"
    FROM czytelnik
    GROUP BY województwo,liczba_wypozyczen
)czytelnik;

Tabela do powyższego kodu.

Jak widać na powyższym obrazku pokazała się tylko jedna kolumna, a nie pokazały się pozostałe 2 kolumny
.Jak zmienić kod aby wyświetlić pozostałe kolumny jak na poniższym obrazku?

1 odpowiedź

0 głosów
odpowiedź 26 maja 2022 przez areklipno Stary wyjadacz (11,930 p.)
wybrane 28 maja 2022 przez Martita
 
Najlepsza

nie trzeba za dużo kombinować..

SELECT województwo,liczba_wypozyczen, czytelnik 

FROM
(
    SELECT województwo,liczba_wypozyczen, COUNT(*) AS "czytelnik"
    FROM czytelnik
    GROUP BY województwo,liczba_wypozyczen
) as dane

order by czytelnik desc
limit 1

------- edit 27.05.2022, ok 9:15

po przeczytaniu komentarza, że musi być użyta funkcja max, żeby znaleźć największą ilość wypożyczeń to zrobiłbym to tak:

SELECT *  --tu wypisać niezbędne kolumny
FROM czytelnik
where liczba_wypozyczen = (SELECT max(liczba_wypozyczen) max_wypozyczenia FROM czytelnik)  

Wg mnie niepotrzebna jest Twoje część z funkcją count bo ona przeliczy tylko ilość wpisów z danego województwa, z określoną liczbą wypożyczeń.

 

 

komentarz 27 maja 2022 przez areklipno Stary wyjadacz (11,930 p.)
Ja się chyba poddaje.. Napiszę szczerze... wg mnie albo nie do końca wiesz co chcesz, albo źle nazywasz to co chcesz (używasz powiązań nazw, funkcji i logiki, które z definicji pokażą Ci co innego niż to nazywasz). Jak jest coś co może pomóc i chyba jest jedyną drogą (limit) dajesz ograniczenie, że nie można...

Jeśli jest to zadanie z książki/kursu przepisze je proszę w całości. Inaczej ja nie widzę rozwiązania.
komentarz 27 maja 2022 przez Martita Bywalec (2,470 p.)

Jeśli jest to zadanie z książki/kursu przepisze je proszę w całości. Inaczej ja nie widzę rozwiązania.

Zadanie od wykładowcy

Funkcją count muszę sprawdzić, ile było wypożyczeń:

Ile razy wypożyczano 1 książkę, w każdym z województw.

Ile razy wypożyczano 2 książki, w każdym z województw.

Ile razy wypożyczano 3 książki w każdym z województw.

Robie to

SELECT województwo, liczba_wypozyczen,
COUNT(*)
AS "Ilość wypożyczeń"
FROM czytelnik
GROUP BY województwo, liczba_wypozyczen
ORDER BY województwo;

W rekordzie 5 w województwie mazowieckim 69 razy wypożyczono jednocześnie po 2 książki.

Teraz z powyższej tabeli kolumny ilość wypożyczeń muszę zrobić Max, czyli sprawdzić ile było najwięcej wypożyczeń. Zrobiłam to kod poniżej.

SELECT
MAX(czytelnik)
AS "Największa ilość wypożyczeń"
FROM
(
    SELECT województwo,liczba_wypozyczen,
    COUNT(*)
    AS "czytelnik"
    FROM czytelnik
    GROUP BY województwo,liczba_wypozyczen
)czytelnik;

Ale jeszcze do tej tabeli muszę jeszcze wstawić kolumnę województwo, żeby wiedzieć, w którym województwie było wypożyczeń 69 razy i muszę jeszcze wstawić kolumne liczba_wypozyczen, aby wiedzieć ile książek jednocześnie wypożyczono przy 69 wypożyczeniach.

Efekt końcowy powinien być jak niżej.

NIE MOŻE BYĆ UŻYTY LIMIT. MUSI BYĆ UŻYTY MAX.

 

 

komentarz 27 maja 2022 przez areklipno Stary wyjadacz (11,930 p.)

Można skleić Twoje 2 zapytania i jest efekt. Tzn:

SELECT województwo, liczba_wypozyczen, COUNT(*) AS "Ilość wypożyczeń"
FROM czytelnik
GROUP BY województwo, liczba_wypozyczen
having count(*) = (
       SELECT MAX(czytelnik)
      FROM
                 (
                 SELECT województwo,liczba_wypozyczen, COUNT(*) AS "czytelnik"
                 FROM czytelnik
                 GROUP BY województwo,liczba_wypozyczen
        ) dane
)
ORDER BY województwo;

Ale jest to taka droga na okrętkę + gwarancji, że wyjdzie dobrze nie ma - wystarczy, że będzie inny zestaw danych, gdzie np tych 69 będzie 10 wtedy zamiast jednego rekordu będzie ich 10.

Tak się w "normalnych" warunkach nie robi bo to zapytanie jest bardzo "niewydajne" przy dużej liczbie danych (kilka milionów wpisów) zaczęłoby długo mielić...

Ewentualnie można to "upiększyć" wstawiając CTE tzn.:

with dane as (
                SELECT województwo,liczba_wypozyczen, COUNT(*) AS "czytelnik"
                 FROM czytelnik
                 GROUP BY województwo,liczba_wypozyczen
)

SELECT województwo, liczba_wypozyczen, czytelnik AS "Ilość wypożyczeń"
FROM dane
where czytelnik = (select max(czytelnik) from dane)
ORDER BY województwo;

 

komentarz 28 maja 2022 przez Martita Bywalec (2,470 p.)

Ewentualnie można to "upiększyć" wstawiając CTE tzn.:

 Dzięki, ale CTE jeszcze nie miałam.

komentarz 28 maja 2022 przez Martita Bywalec (2,470 p.)

Można skleić Twoje 2 zapytania i jest efekt. Tzn:

Super dzięki działa. Krótszego sposobu nie ma oprócz tych 2 sposobów?

Podobne pytania

0 głosów
0 odpowiedzi 197 wizyt
pytanie zadane 24 maja 2022 w SQL, bazy danych przez Martita Bywalec (2,470 p.)
+1 głos
1 odpowiedź 237 wizyt
pytanie zadane 29 maja 2022 w SQL, bazy danych przez Martita Bywalec (2,470 p.)
0 głosów
2 odpowiedzi 560 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...