2013-05-02 3 views
2

У меня есть таблица базы данных campaign_data. Мне нужно выбрать customer_id, где в кампании есть разница в тарифе. Как я могу это сделать с запросом MySQL. Вот несколько примеров данных.SELECT records WHERE строки имеют разницу по определенному столбцу

SQL Fiddle Schema

| CAMPAIGN_ID | CUSTOMER_ID | CAMPAIGN_NAME | TARIFF | 
--------------------------------------------------------- 
|   1 |   1 |   Richmond | 100 | 
|   2 |   1 | Sutton Coldfield |  75 | 
|   3 |   1 |   Putney | 100 | 
|   4 |   1 |  Kentish Town | 100 | 
|   5 |   1 |   Woking | 100 | 
|   6 |   2 |   Chiswick |  90 | 
|   7 |   2 |   Ealing | 100 | 
|   8 |   2 |   Camden | 100 | 
|   9 |   3 |   Croydon |  75 | 
|   10 |   3 |   Croydon1 | 100 | 
|   11 |   3 |   Archway | 100 | 
|   12 |   4 |   Ealing0 | 100 | 
|   13 |   4 |   Ealing01 | 100 | 
|   14 |   4 |   Ealing02 | 100 | 
|   15 |   4 |  Chingford | 100 | 
|   16 |   4 |  chingford01 | 100 | 

Теперь, как вы можете видеть, идентификатор клиента 1 и 3 имеют различные тарифы. Я хочу выбрать их и оставить идентификатор клиента 4, поскольку он имеет кампании с одинаковыми тарифами.

Желаемая Выход

| CUSTOMER_ID | 
--------------- 
|   1 | 
|   2 | 
|   3 | 

Для clearification вы можете увидеть клиента 1 имеет 5 записей. Если в его 5 записях тариф такой же (100), я хочу избежать, но если тариф не какой-то, а 4 записи имеют 100, а у одного - 75, я хочу выбрать.

ответ

5
SELECT customer_id, count(DISTINCT tariff) as tariffs 
FROM campaign_data 
GROUP BY customer_id 
HAVING tariffs > 1 
+0

спасибо за умный бит! –

1
select 
    customer_id, 
    tariff 
from campaign_data 
group by customer_id 
having sum(tariff)/count(tariff) <> tariff; 
+0

благодаря @Yordi, которые дали мне хорошее обучение! однако были ошибки заклинания! –

+0

это неправильно :), я думаю об этом, но его неправильно, а как насчет этого тарифа, 100,99,101? это будет равный тариф :) –

+0

yep true, вы правы! это неверно ! – Yordi

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