2016-02-04 5 views
-2

Каков наилучший способ проверить, есть ли у разных групп строк в таблице с одним и тем же идентификатором группы, например с разными командами, капитан SINGLE? Например, идентификатор капитана может быть «10», поэтому его важно, чтобы он проходил через несколько записей с одним и тем же идентификатором группы и проверял, записывает ли их только ONE ONE с идентификатором positionID как «10». Мне это нужно, чтобы сделать это для всех команд, то есть все GroupID-хКак проверить одно значение в нескольких строках

------------------------------------------------- 
ID | Group ID | Name | Position| 
------------------------------------------------- 
1  1  John  3 
2  1  jim  3 
3  1  Hahn  4 
4  1  Mary  4 
5  1  Moe  4 
6  1  Charlie 10 
7  2  taylor 4 
8  2  Geoff 4 
9  2  adam  4 
10  2  cam  10 
11  3  sharon 2 
12  3  tony  4 
13  3  steve 3 
14  3  eve  4 
15  3  gwen  10 
-------------------------------- 

Так что мне нужно сделать, это проверить, что каждый GroupID был только один 10 в качестве позиции.

Спасибо заранее, ребята. Проверьте ссылку изображения внизу.

им с помощью MySQL КСТАТИ

Извините, если это плохо описано

+2

Можете ли вы добавить определение таблицы, некоторые данные таблицы образцов и ожидаемый результат. – jarlh

+0

Пожалуйста, отредактируйте ваш вопрос и предоставите образцы данных и желаемые результаты. Кажется, я понимаю, что вы в замешательстве. Я не знаю, чего вы пытаетесь достичь. –

+1

В идеале, у SQL, который у вас есть сейчас, это тоже не работает. Вероятно, есть несколько способов справиться с этим, и если вы не просеиваете десятки миллионов записей, «лучший» способ - это то, что обычно работает. Это, по крайней мере, даст нам представление о том, как вы в настоящее время пытаетесь работать с данными. – user2366842

ответ

0

Если я правильно понял вас, вам нужно указание, которое сообщит вам, имеет ли группаID более одного капитана.

Так что вам нужно это:

select groupID,case when cnt = 1 then 1 else 0 end as IND_ONE_CAPTAIN from (
select groupID, sum(case when positionid = '10' then 1 else 0 end) as cnt 
from players 
group by groupID) 

Теперь IND_ONE_CAPTAIN столбцы состоят 1 или 0, 1 для группы идентификатор был только 1 капитан, и 0, когда у них было больше.

+1

Очень смиренно я скажу, что мой ответ более компактен, имея один запрос –

+0

Он хотел проверить каждую команду, если у них больше 1 капитана или нет, не выбирайте только их. Итак, мой ответ более правильный (кстати, мой внутренний запрос делает то же самое, что и ваш) @zahiromor – sagi

+0

Прохладный. Я вижу вашу мысль. Cheers –

1

Если я вас понял, - я думаю, что нужно что-то вроде:

select groupId, sum(case when positionID='10' then 1 else 0 end) as captains 
from tbl_name 
group by groupID 
having captains = 1 

ам я закрываю ???

+1

Изменение 'count()' to 'sum()' делает запрос правильным. –

+0

tnx @GordonLinoff мое удовольствие и привилегия для редактирования вами :) –

Смежные вопросы