2016-08-16 4 views
-2

Вот мой стол:SQL: Отличный счет с где?

Players_Games_Table

MDATE PLAYER TEAM 
12  evra liverpool 
12  giggs liverpool 
12  smith liverpool 
13  evra leeds 
13  giggs liverpool 
13  smith manu 
14  evra spurs 
14  giggs liverpool 
14  smith chelsea 

Я хочу вернуть имя игрока (игрок) игроков, которые играли за «Ливерпулем» и, по меньшей мере, одной другой команде.

Что-то вроде этого:

select distinct player, count(team) from stats 
where team = 'liverpool' 
group by player 
having count(team) > 1; 
+1

_WHERE_ приходит до _GROUP BY_ –

+0

Двойные кавычки предназначены для идентификаторов с разделителями (например, столбцы с нечетными именами.) Используйте одинарные кавычки для строковых литералов. – jarlh

+0

Не нужно делать SELECT DISTINCT, ваша GROUP BY не возвращает дубликатов. – jarlh

ответ

0

Может быть сделано несколькими способами, например, вы можете иметь коррелировала подзапрос, который выполняет подсчет команды:

select * 
from 
(
    select player, (select count(distinct team) from stats s2 
        where s2.player = s1.player) as teamcount 
    from stats s1 
    where team = 'Liverpool' 
) dt 
where teamcount > 1 

Или, стандартный GROUP BY , в сочетании с EXISTS:

select player, count(distinct team) 
from stats s1 
where exists (select * from stats s2 
       where s1.player = s2.player 
       and s2.team = 'Liverpool') 
group by player 
having count(distinct team) > 1 
0
select a.PLAYER,count(*)+1 
from stats a 
join stats b 
on (a.PLAYER=b.PLAYER) 
where a.TEAM=liverpool and b.TEAM!=liverpool 
group by a.PLAYER; 
Смежные вопросы