• 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ń

0 głosów
785 wizyt
pytanie zadane 2 marca 2023 w SQL, bazy danych przez qax Dyskutant (8,180 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,990 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,180 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,180 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 446 wizyt
pytanie zadane 7 września 2018 w SQL, bazy danych przez Sebastian Fojcik Nałogowiec (43,040 p.)
0 głosów
1 odpowiedź 539 wizyt
pytanie zadane 8 stycznia 2018 w SQL, bazy danych przez niko64 Użytkownik (630 p.)
+1 głos
2 odpowiedzi 453 wizyt
pytanie zadane 29 grudnia 2021 w SQL, bazy danych przez Grzegorzko Obywatel (1,110 p.)

93,733 zapytań

142,669 odpowiedzi

323,287 komentarzy

63,294 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...