2010-11-10 2 views
2

У меня два BMW и два Mercedes и один Kia. Они находятся в таблице MySQL с car_id и brand.I хочу знать, как у каких марок автомобилей у меня есть только одна. Так что, как я ожидал, это одна запись в этом случае с брендом «Kia». Я не хочу, чтобы BMW или Mercedes вообще появлялись.Как отфильтровать записи с несколькими ключами в MySQL?

Редактировать

Я более упрощена мою проблему. Извини за это. Итак, вот реальная сделка. У меня есть стол с сидом и спрятался. Сид уникален, но спрятаться нет. Мне нужно подсчитать количество уникальных скрытых. Для этого я сделал,

select count(distinct hid) from table 

Для подсчета полного количества записей там я просто посмотрел на количество строк, возвращаемых из

select * from table 

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

select * from ( 
select distinct hid from table group by hid 
    union 
select hid from table group by hid) group by hid 

думая, что это вернет мне все HIDS, которые показывают во втором запросе, которые не в первый. Этого не происходит, и я довольно сильно зациклен на том, куда идти отсюда. Есть ли способ взять два запроса, которые у меня есть, и получить разницу по скрытым?

Я не имею в виду разницу, как в случае «вычитания общей суммы из уникальных скрытий». Я имею в виду разницу, как в том, что содержится в общей сумме, которая по какой-либо причине не отображается в уникальной форме.

ответ

7

Использование:

SELECT t.hid 
    FROM YOUR_TABLE t 
GROUP BY t.hid 
    HAVING COUNT(*) > 1 

Ранее:

SELECT t.brand 
    FROM YOUR_TABLE t 
GROUP BY t.brand 
    HAVING COUNT(*) = 1 
+0

Я думаю, что ваше решение будет работать отлично, если бы я не упростил реальную проблему, с которой я столкнулся: - \ Sorry. См. Редактирование. – baudtack

+0

Мне не нужна разница между общей и уникальной. Я хочу, чтобы фактические данные находились в общей сумме, но не показываются в уникальной форме. – baudtack

+0

@docgnome: Не показано в уникальном? Это читает мне как те, которые дублируются ... –

0

Это звучит как будто вы хотите один запрос, который будет возвращать как общее количество записей и числа hid с которые возникают только один раз - если это так, попробуйте:

select sum(count_hid) total_count, 
     sum(case count_hid when 1 then 1 else 0 end) singles_count 
from 
(select count(*) count_hid 
from your_table 
group by hid) sq 
Смежные вопросы