2017-02-22 3 views
-2

У меня есть таблица соответствия с winteamid и staticid как атрибуты, Мне нужно получить выигрышную победу, которая выиграла все свои игры на том же стадионе.решение для написания запроса

Я попробовал это, и я получаю дополнительные ненужные строки:

select winningteamid 
from match 
group by winningteamid 
having count(winningteamid) in (
    select count(*) from match group by (winningteamid,stadiumid) 
+0

Ошибка синтаксиса ... – jarlh

+0

Добавьте пример данных таблицы и ожидаемый результат - также форматированный текст. – jarlh

ответ

0

Вы должны использовать это:

SELECT MAX(winningteamid) 
FROM (
    SELECT DISTINCT winningteamid, stadiumid 
    FROM match 
) 
GROUP BY stadiumid 
HAVING COUNT(*) = 1; 
+0

Я использую oracle – nagesh

+0

Спасибо .. Все – nagesh

0

Попробуйте, пожалуйста, (пожалуйста, напишите который RDBMS вы используете):

with cte as (
    select winningteamid, stadiumid, count(stadiumid) over (partition by winningteamid) as count 
    from match 
    group by winningteamid, stadiumid 
) 
select * from cte where count = 1; 
+0

Спасибо .. Хорошо работает – nagesh

+0

добро пожаловать, пожалуйста, голосуйте или принимайте ответ, если это было решение – RoundFour

0

Я полагаю, что это так же просто, как использование HAVING для проверки только одного конкретного стадиона:

select winningteamid 
from match 
group by winningteamid 
having count(distinct stadiumid) = 1 
+0

Я использую oracle 9i, таблицы соответствия с атрибутами matchid, winningteamid, Stadiumid – nagesh