SQL jak napisać SELECT w którym wszystkie zebrane rekordy muszą spełniać warunek

0

Witam,

Mam problem z wybraniem takich rekordów, w których powtarzają się pewne wartości. I tak chciałabym zrozumieć jak napisać selekta w dwóch przypadkach:

  1. Nazwiska osób, które wygrały w każdej siatkówce.
  2. Nazwiska osob, które wygrały chociaż jedną siatkówkę
SELECT DISTINCT NAZWISKO FROM SOME_TABLE
WHERE KONKURENCJA ='Siatkowka'
AND WYNIK = 'Wygrana';

Powyższy select zdaje się działać w przypadku gdy występuje przynajmniej jedna wygrana, ale nie potrafię znaleźć rozwiązania znalezienia nazwisk, które mają same wygrane w danej konkurencji.

Będę bardzo wdzięczna za pomoc!0

Screenshot_20220828-144242_Word.jpg

0

Co do 1.

SELECT DISTINCT NAZWISKO FROM SOME_TABLE
WHERE KONKURENCJA ='Siatkowka'
AND WYNIK = 'Wygrana'
GROUP BY NAZWISKO;

Co do 2.

Nazwiska osob, które wygrały chociaż jedną siatkówkę: uzyć WHEN - CASE - ELSE (jakos tak) i warunek 1 gdy wygrana, 0 gdy przegrana - potem zrób sumę i gdy suma > 0 to była wygrana. Połącz to z group by.

0

Ad.1.

SELECT a.NAZWISKO FROM 
(SELECT DISTINCT NAZWISKO FROM SOME_TABLE WHERE KONKURENCJA ='Siatkowka' AND WYNIK = 'Wygrana') a left join 
(SELECT DISTINCT NAZWISKO FROM SOME_TABLE WHERE KONKURENCJA ='Siatkowka' AND WYNIK <> 'Wygrana') b on (a.nazwisko=b.nazwisko)
WHERE b.nazwisko is null
2

Nazwiska osób, które wygrały w każdej siatkówce.

select
     nazwisko
from
    tab
where
    konkurencja = 'siakowka'
group by 
    nazwisko
having
    sum(case when  WYNIK <> 'Wygrana' then 1 else 0 end) = 0

Nazwiska osob, które wygrały chociaż jedną siatkówkę

select
     nazwisko
from
    tab
where
    konkurencja = 'siakowka'
    and WYNIK = 'Wygrana'
group by 
    nazwisko

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