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

Funkcja Count w SQL wraz ze współczynnikiem wystąpień

Object Storage Arubacloud
0 głosów
352 wizyt
pytanie zadane 2 marca 2023 w SQL, bazy danych przez qax Dyskutant (8,060 p.)

Hejka.

Załóżmy, że mamy prostą tabelę w bazie danych z listą imion użytkowników:

Teraz wykonujemy proste zapytanie zwracające liczę wystąpień każdego z imion:

SELECT user_name, COUNT(user_name)
FROM users
GROUP BY user_name

Wynik jest oczywisty:

Mój problem polega na tym, że nie nie wiem jak obliczyć współczynnik równy liczbie wystąpień każdego użytkownika podzielny przez maksymalną wartość znalezioną w tej samej kolumnie (tzn. znalezioną w tej kolumnie z liczbą wystąpień poszczegółnych imion). Oczekiwana tabela wynikowa, którą chciałbym otrzymać mogłaby wyglądać tak:

Przykładowo Tomek występuje w tabeli 3 razy i jest to najwyższa liczba dlatego ma współczynnik 100% (1,00000), natomiast Zbyszek występuje raz i jest to 3 razy mniej niż najwyższa liczba stąd posiada współczynnik 33% (0.33333).

Na stronie https://www.w3resource.com/sql/aggregate-functions/min-count.php jest przedstawione rozwiązanie podobnego problemu ale ja chcem użyć funkcji MAX() dla każdej z osobna.

Z góry dzięki za pomoc. Pozdrawiam.

1 odpowiedź

0 głosów
odpowiedź 2 marca 2023 przez areklipno Stary wyjadacz (11,930 p.)

Cześć,

wydaje mi się, że powinieneś trochę bardziej rozbudować zapytanie. Np.

with dane as (
select 'Tomek' imie
	union all 
	select 'Tomek'
	union all
	select 'Łukasz'
	union all
	select 'Ola'
), ilosci as (
select imie, count(*) ile
from dane
group by imie
	)
	
select imie, ile, round(ile::decimal/(select max(ile) from ilosci)::decimal,4) wspolczynnik
from ilosci

Testowałem na postgresie - jeśli używasz innego silnika będziesz musiał trochę dostosować.

komentarz 2 marca 2023 przez qax Dyskutant (8,060 p.)

Nie znam postgresa, bo używam mysqla, a na nim podane zapytanie nie działa. Nie dostosuję go do własnych potrzeb - zresztą nawet nie wiem na na Twoim kodzie jest jedno zapytanie dwa, jeden pod drugim, ale nieważne. Może jeszcze ułatwię zadanie i przedstawię tabelę wynikową, jaką potrzebuję:

Jak widać potzebuję w każdym rekordzie informację jaka jest maksymalna liczba wystąpień danego imienia (resztę mogę obliczyć sobie w JS/PHP etc.)

komentarz 2 marca 2023 przez qax Dyskutant (8,060 p.)

Próbowałem, kombinowałem no i w końcu udało mi się. smiley Poniżej podaję zapytanie SQL zwracające tabelę 30 pierwszych najczęściej występujących fraz wraz z wartością minimalną i maksymalną spośród znalezionego zakresu:

SELECT 
    keyword_content AS 'keyword_content',
    COUNT(keyword_content) AS 'keyword_count',
    (SELECT 
            MIN(`a`)
        FROM
            (SELECT 
                keyword_content, COUNT(keyword_content) `a`
            FROM
                searches_keywords
            GROUP BY keyword_content
            ORDER BY keyword_content ASC
            LIMIT 0 , 30) `b`) AS 'keyword_min',
    (SELECT 
            MAX(`c`)
        FROM
            (SELECT 
                keyword_content, COUNT(keyword_content) `c`
            FROM
                searches_keywords
            GROUP BY keyword_content
            ORDER BY keyword_content ASC
            LIMIT 0 , 30) `d`) AS 'keyword_max'
FROM
    searches_keywords
GROUP BY keyword_content
ORDER BY keyword_content
LIMIT 0, 30

 

Podobne pytania

0 głosów
3 odpowiedzi 209 wizyt
pytanie zadane 7 września 2018 w SQL, bazy danych przez Sebastian Fojcik Nałogowiec (43,020 p.)
0 głosów
1 odpowiedź 316 wizyt
pytanie zadane 8 stycznia 2018 w SQL, bazy danych przez niko64 Użytkownik (630 p.)
+1 głos
2 odpowiedzi 220 wizyt
pytanie zadane 29 grudnia 2021 w SQL, bazy danych przez Grzegorzko Obywatel (1,110 p.)

92,547 zapytań

141,389 odpowiedzi

319,508 komentarzy

61,931 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!

...