2014-11-12 2 views
1

аЬса стол -MySQL отличается граф

ID 
--- 
1 
2 
3 

хуга стол -

abc_id | flag 

-------------- 

1  | 0 

1  | 1 

2  | 0 

3  | 0 

3  | 0 

мне нужен подсчет отдельного abc_id, где, если флаг = 1 для конкретного abc_id, то, что идентификатор не должен быть подсчитаны. В приведенном выше примере счет должен быть 2. Есть ли способ, которым я могу это достичь? Извините, если на вопрос был дан ответ или если это что-то очевидное. Заранее спасибо ^^

EDIT: В принципе, я хочу, чтобы abc_id = 1 игнорировался в счете, потому что один из его флагов = 1. Надеюсь, это достаточно ясно: |

+0

Пожалуйста переформатировать свой пост. Я ничего не могу опознать. – Evan

+0

Число отдельных abc_id для одного конкретного abc_id всегда одно. Добавьте флаг, и счет будет равен 0 или 1. Счет в 2 невозможно в соответствии с вашим текстовым объяснением. Можете ли вы попытаться перефразировать свой вопрос, чтобы устранить эту двусмысленность? – GolezTrol

+0

Отредактировано. Виноват. Первый пост. – Jason

ответ

0

Основная проблема заключалась в том, чтобы понять, что вы имели в виду, но я уверен, что это так. : o)

Подсчитайте отличные abc_id s, полностью исключая идентификаторы, имеющие по крайней мере одну строку, помеченную. Таким образом, id 1 исключается, поскольку он имеет флаг.

Вы можете решить это с помощью условия not in, чтобы исключить все иды, которые были помечены. После этого вы можете подсчитать оставшиеся строки, используя count(distinct abc_id), чтобы получить количество различных идентификаторов.

select 
    count(distinct abc_id) as non_flagged_id_count 
from 
    xyz x1 
where 
    abd_id not in 
    (select x2.abc_id from xyz x2 where x2.flag = 1) 
+0

Да, да! Это именно то, что я хотел! Спасибо, сэр. ^^ – Jason

0
select count(distinct abc_id) 
from xyz as x 
left join (
select abc_id from xyz where flag = 1 
) as y using (abc_id) 
where y.abc_id is null 
; 
Смежные вопросы