Nie mogę wyciągnąć MAX z COUNT(*)

0

POSTGRESQL

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

Nie mogę wyciągnąć MAX z COUNT(). i nie wiem, jak sobie z tym poradzić.
Mam zadanie
Z kolumny COUNT(
) AS "Ilość wypożyczeń" wykonaj zapytanie o największą Ilość wypożyczeń w danym województwie. UWAGA MUSISZ UŻYĆ MAX. Największą Ilość wypożyczeń ma województwo mazowieckie i jest ich 69, czyli 69 razy wypożyczano po 2 książki (kolumna liczba_wypożyczeń).
Czyli wynik powinien być taki jak na poniższym obrazku
screenshot-20220525155042.png

Wynik mam jak poniżej
screenshot-20220525155209.png

SELECT
MAX(czytelnik)
AS "Największa suma czytelników"
FROM
(
    SELECT województwo,liczba_wypozyczen,
    COUNT(*)
    AS "czytelnik"
    FROM czytelnik
    GROUP BY województwo,liczba_wypozyczen
)czytelnik;

Jak wstawić brakujące kolumny?

1

A jakie jest pytanie ?

0
S4t napisał(a):

A jakie jest pytanie ?

Jak wstawić brakujące kolumny? czyli województwo i liczba wypożyczeń.

2

W głównym query pogrupuj jak w wewnętrznym i wstaw kolumny do selecta.

0
S4t napisał(a):

W głównym query pogrupuj jak w wewnętrznym i wstaw kolumny do selecta.

Nierozumiem możesz jaśniej? Co to jest query?

0

Wyskakuje błąd nie wiem co jest źle.

SELECT województwo,liczba_wypozyczen,
FROM
(
	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
)czytelnik
GROUP BY województwo,liczba_wypozyczen;
2
Marta Długa napisał(a):

Wyskakuje błąd nie wiem co jest źle.

SELECT województwo,liczba_wypozyczen,
FROM
(
	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
)czytelnik
GROUP BY województwo,liczba_wypozyczen;

Po co ci kolejne zapytanie zrób to w tym, gdzie masz maxa. I jak masz błędy to się nie wstydź i je pokaż.

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

Wyszło jak niżej
screenshot-20220525164509.png

Powinno wyjść jak niżej
screenshot-20220525164608.png

Max "Największa ilość wypożyczeń " jest w count,(*). Mam za zadanie wykonaj zapytanie o największą Ilość wypożyczeń w danym województwie (MAX). Największa Ilość wypożyczeń jest 69 w województwie mazowieckim.
Czyli musi mi się pokazać wynik jak niżej
screenshot-20220525164608.png
Tam gdzie pisze Największa suma czytelników powinno pisać Największa Ilość wypożyczeń

1

		SELECT województwo,liczba_wypozyczen,
		COUNT(*)
		AS "czytelnik"
		FROM czytelnik
        where COUNT(*) = ( SELECT max(C)  FROM (
                          SELECT COUNT(*) C
                		  FROM czytelnik
                		  GROUP BY województwo,liczba_wypozyczen)
		GROUP BY województwo,liczba_wypozyczen

Tak na sucho to trudno - to jest ogólny zarys.

0

Po co ci kolejne zapytanie zrób to w tym, gdzie masz maxa. I jak masz błędy to się nie wstydź i je pokaż.
Nie wiem gdzie jest błąd

S4t napisał(a):

		SELECT województwo,liczba_wypozyczen,
		COUNT(*)
		AS "czytelnik"
		FROM czytelnik
        where COUNT(*) = ( SELECT max(C)  FROM (
                          SELECT COUNT(*) C
                		  FROM czytelnik
                		  GROUP BY województwo,liczba_wypozyczen)
		GROUP BY województwo,liczba_wypozyczen

Tak na sucho to trudno - to jest ogólny zarys.

Wywala błąd ERROR: subquery in FROM must have an alias
LINE 5: where COUNT(*) = ( SELECT max(C) FROM (
^
HINT: For example, FROM (SELECT ...) [AS] foo.
Stan SQL: 42601
Znak: 131

Ten kod i tabela poniżej pokazuje mi wszystkie ilości wypożyczeń (kolumna Największa ilość wypożyczeń) ze wszystkich województw (kolumna województwo) i wypożyczona liczba książek (kolumna liczba wypożyczeń). Ja muszę wyciągnąć rekord z największą ilością wypożyczeń, czyli rekord 6 używając funkcji MAX..

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

screenshot-20220525174305.png
Tabela powinna wyglądać jak niżej.
screenshot-20220525181333.png
Tam gdzie pisze Największa suma czytelników powinno pisać Największa Ilość wypożyczeń. Później to zmienie.

Teraz rozumiesz?
Co jeszcze potrzebujesz?

0

Tabel i Kod poniższy prawie rozwiązuje mój problem tylko brakuje 2 kolumn województwo i liczba wypożyczeń.

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;

screenshot-20220525184735.png
Brakuje
screenshot-20220525184859.png

Czy teraz jest to zrozumiałe bo nie wiem jak to wytłumaczyć.

0

Podaj jak wyglądają dane, to trochę ułatwi zadanie

0
SELECT województwo,liczba_wypozyczen,COUNT(*) AS "czytelnik", Max(Count(*)) Over() maks_czytelnik
FROM czytelnik
GROUP BY województwo,liczba_wypozyczen
ORDER BY 4 DESC 
LIMIT 1

:)
EDIT:
albo jeszcze prościej

SELECT województwo,liczba_wypozyczen,COUNT(*) AS "czytelnik"
FROM czytelnik
GROUP BY województwo,liczba_wypozyczen
ORDER BY 3 DESC 
LIMIT 1
0
Ales napisał(a):

Podaj jak wyglądają dane, to trochę ułatwi zadanie
@Marcin.Miga:

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;

screenshot-20220525200825.png

Kolumna liczba_wypożyczeń - Liczba książek wypożyczonych.

Kolumna Największa ilość wypożyczeń - ilość wypożyczeń.

Przykład we wierszu 9 w województwie łódzkim (kolumna województwo) została wypożyczona 1ną książka (Kolumna liczba_wypożyczeń) i była wypożyczana 3 razy (Kolumna Największa ilość wypożyczeń)

Przykład we wierszu 8 w województwie świętokrzyskim (kolumna województwo) zostały wypożyczone 3rzy książki jednocześnie (Kolumna liczba_wypożyczeń) i 5 razy wypożyczono po 3 książki jednocześnie (Kolumna Największa ilość wypożyczeń).

ZADANIE

W zapytaniu musi znajdować się funkcja MAX i COUNT.

Wykonaj zapytanie, które wyświetli największą ilość wypożyczeń, czyli ile razy najwięcej wypożyczano książki.Dodaj do tego kolumnę województwo, aby było wiadomo, z którego województwa jest największa ilość wypożyczeń. Dodaj też do tego kolumnę liczba_wypożyczeń, aby było wiadomo ile książek jednocześnie wypożyczono.

Wynikiem powinna być poniża tabela
screenshot-20220525200900.png
Największa ilość wypożyczeń to 69 razy.

Jednocześnie wypożyczono 2 książki.

Największa ilość wypożyczeń jest w województwie mazowieckim.

Wynika to wszystko z rekordu 6.

Ja prawie zrobiłam tylko z 3 kolumn brakuje mi 2 kolumny z jednym rekordem.

Mam zrobione kod zrobiony

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;

screenshot-20220525201104.png
Brakuje mi

screenshot-20220525201152.png
Jak dodać te kolumny do kod zrobiony?

0

@Marcin.Miga: Przeczytaj post przed tym postem. Nie może być limit bo musi być przez funkcje MAX.
Poniższy kod jest dobrze tylko brakuje 2 kolumn z 3. Brakuje kolumny województwo i liczba_wypożyczeń.

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;

Mam tak

screenshot-20220525202026.png

1
select wojewodztwo, liczba_wpozyczen, najwieksza_liczba_wypozyczen
from czytelnik
where najwieksza_liczba_wypozyczen = (select max(najwieksza_liczba_wypozyczen) from czytelnik)

Jest MAX? Jest

0

Czy tylko mnie się wydaje, że treść zadania nie jest napisana po polsku?

0

@Marcin.Miga: wywala błędem
ERROR: column "najwieksza_liczba_wypozyczen" does not exist
LINE 1: select województwo, liczba_wypozyczen, najwieksza_liczba_wyp...
^
Stan SQL: 42703
Znak: 40

@Marcin.Miga Funkcja MAX jest funkcją maksymalną gdzie jakaś liczba w tabeli w kolumnie jest największa zgadza się?

@Fac: Jak jesteś taki mądry to wytłumacz.

Poniższa tabela powstała z kodu

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;

Z poniższej tabeli mam utworzyć funkcje MAX. Na czerwono zaznaczyłam jaki wynik powinien się pokazać oczywiście z nagłówkami kolumn.

screenshot-20220525212303.png
Powyższa tabela rekord 6 (zaznaczony na czerwono) oznacza W województwie mazowieckim wypożyczono 69 razy jednocześnie po 2 książki.

Mój wynik pokazał się taki jak poniżej.
screenshot-20220525212928.png
Mój wynik jest z kodu poniższego

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;

Czy teraz rozumiecie? Proszę o potwierdzenie

0

Funkcja MAX działa po całej tabeli jak nie ma grupowania, ale jak nie ma grupowania to nie mozesz dociągać innych kolumn (w przypadku grupowania możesz używać tylko kolumn, po których grupujesz). Dlatego najpierw musisz znaleźć odpowiedni wiersz a potem dla niego wygrać dane. Tu ci podałem jak to zrobić Nie mogę wyciągnąć MAX z COUNT(*).
A tu masz dodany alias o który krzyczał postgres:

SELECT województwo,liczba_wypozyczen,
		COUNT(*)
		AS "czytelnik"
		FROM czytelnik
        where COUNT(*) = ( SELECT max(C)  FROM (
                          SELECT COUNT(*) C
                		  FROM czytelnik
                		  GROUP BY województwo,liczba_wypozyczen) as t
		GROUP BY województwo,liczba_wypozyczen

Musisz wykazać chodź trochę zaangażowania i przynajmniej czytać błędy, które dostajesz. Jak oczekujesz gotowca to nie ten dział.

0
S4t napisał(a):

Musisz wykazać chodź trochę zaangażowania i przynajmniej czytać błędy, które dostajesz. Jak oczekujesz gotowca to nie ten dział.

Nie oczekuje gotowca cały czas szukam i kombinuje ale nie wychodzi mi. Czytam błędy ale niestety co zrobie z wyczytanego błędu to znowu inny błąd i tak w kółko. 4 dzień z tym walcze. Dzięki.

0

błąd składni w miejscu lub w pobliżu "*"> ##### S4t napisał(a):

Funkcja MAX działa po całej tabeli jak nie ma grupowania, ale jak nie ma grupowania to nie mozesz dociągać innych kolumn (w przypadku grupowania możesz używać tylko kolumn, po których grupujesz). Dlatego najpierw musisz znaleźć odpowiedni wiersz a potem dla niego wygrać dane. Tu ci podałem jak to zrobić Nie mogę wyciągnąć MAX z COUNT(*).
A tu masz dodany alias o który krzyczał postgres:

SELECT województwo,liczba_wypozyczen,
		COUNT(*)
		AS "czytelnik"
		FROM czytelnik
        where COUNT(*) = ( SELECT max(C)  FROM (
                          SELECT COUNT(*) C
                		  FROM czytelnik
                		  GROUP BY województwo,liczba_wypozyczen) as t
		GROUP BY województwo,liczba_wypozyczen

Musisz wykazać chodź trochę zaangażowania i przynajmniej czytać błędy, które dostajesz. Jak oczekujesz gotowca to nie ten dział.

Dałam średnik na końcu kodu.
To jest błąd błąd składni w miejscu lub w pobliżu ";"
Zamknełam nawias i pojawił się błąd Funkcje agregatów nie są dozwolone w WHERE.
Usenełam where to znowu błąd
usunełam where.. To mam znowu błąd błąd składni w miejscu lub w pobliżu "*".

Wyszło mi coś takiego ale nadal błędy BŁAGAM POMÓŻ już nie mam pomysłu, jestem początkująca i nie mieliśmy tego tylko łatwe przykłady.

SELECT województwo,liczba_wypozyczen,
COUNT(*)
AS "czytelnik"
FROM czytelnik
WHERE COUNT(*) = ( 
					SELECT 
					MAX(czytelnik)  
					FROM (
                          	SELECT COUNT(*) as czytelnik
                		  	FROM czytelnik
                		  	GROUP BY województwo,liczba_wypozyczen
						 ) as czytelnik
				)
GROUP BY województwo,liczba_wypozyczen;
0

Przetestuj to:

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;
0

Wygląda na klasyczne zadananie na użycie GROUP BY i HAVING.

0
Ales napisał(a):

Przetestuj to:

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;

@yarel:
Pokazuje całą tabelę jak poniżej i z tej tabeli chce wyciągnąć funkcje max.

screenshot-20220526102945.png
screenshot-20220526111122.png

Poniższy kod wyciągnął mi z tabeli powyższej funkcje max, ale tylko z jeden kolumny zamiast z 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;

Powyższy kod pokazuje jak niżej.
screenshot-20220526110111.png

Powinno wyświetlać cały rekord czyli 3 kolumny ale jeden wiersz jak poniżej + nagłówki kolumn.
screenshot-20220526103111.png

1

@Marta Długa: coś w stylu (nie testowałem składniowo)

 SELECT 
    województwo,
    liczba_wypozyczen,
    COUNT(*) AS czytelnik
 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
);
1
select "województwo", liczba_wypozyczen, "Największa ilość wypożyczeń"
from czytelnik
where "Największa ilość wypożyczeń" = (select max("Największa ilość wypożyczeń") from czytelnik)
0
yarel napisał(a):

@Marta Długa: coś w stylu (nie testowałem składniowo)

 SELECT 
    województwo,
    liczba_wypozyczen,
    COUNT(*) AS czytelnik
 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
);

@yarel:
To jest to, tylko poprawiłam trochę kod. Wielkie dzięki.
Prawidłowy kod to

SELECT województwo, liczba_wypozyczen,
 COUNT(*) AS czytelnik
 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
					)czytelnik
	              );

screenshot-20220526122927.png

0
Marcin.Miga napisał(a):
select "województwo", liczba_wypozyczen, "Największa ilość wypożyczeń"
from czytelnik
where "Największa ilość wypożyczeń" = (select max("Największa ilość wypożyczeń") from czytelnik)

Wywala błędy
w select nie może być "Największa ilość wypożyczeń" bo jest utworzona z count (*) as "Największa ilość wypożyczeń".
Ja poprawiłam ale wywala błędem ERROR: column "Największa ilość wypożyczeń" does not exist
LINE 3: where "Największa ilość wypożyczeń" = (select max("Największ...
^
Stan SQL: 42703

select "województwo", liczba_wypozyczen
from czytelnik
where "Największa ilość wypożyczeń" = (select max("Największa ilość wypożyczeń") from czytelnik);
0

za duzo kombinujecie

SELECT województwo, liczba_wypozyczen, MAX(najwieksza_liczba_wypozyczen) as najwieksza_liczba_wypozyczen
        FROM czytelnik
        GROUP BY województwo, liczba_wypozyczen
        ORDER BY najwieksza_liczba_wypozyczen DESC
         LIMIT 1
0

@chomikowski: ERROR: column "najwieksza_liczba_wypozyczen" does not exist
LINE 1: SELECT województwo, liczba_wypozyczen, MAX(najwieksza_liczba...
^
Stan SQL: 42703
Znak: 44
Dzięki

Prawidłowe rozwiązanie

SELECT województwo, liczba_wypozyczen,
 COUNT(*) AS czytelnik
 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
					)czytelnik
	              );

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