根据列值从mysql结果中过滤重复项

时间:2011-09-29 14:47:28

标签: mysql group-by duplicates distinct rows

我在解决如何从以下mysql表中返回所需行时遇到一些问题:

first_name      last_name      collection
==========================================
   Bob            Jones            1
   Ted            Jones            1
   Bob            Jones            1
   Bob            Jones            2
   Ted            Baker            2

我想根据列'first_name'和'last_name'返回名称计数。通常情况下,使用'group by first_name,last_name'只是一个简单的例子,因此我们会得到以下结果:Bob Jones为3,Ted Jones为1,Ted Baker为1。

然而,困难在于第三栏'收集'。我需要在集合之间排除重复的名称,但不在集合中排除。因此,我们将在第一个集合的计数中包含所有名称,但如果它们不在第一个集合中出现,则仅在第二个集合的计数中包含名称。

因此,所需的结果如下:Bob Jones为2,Ted Jones为1,Ted Baker为1。

first_name      last_name      collection             included?
==========================================         ===============
   Bob            Jones            1                    Yes
   Ted            Jones            1                    Yes
   Bob            Jones            1                    Yes
   Bob            Jones            2                    No
   Ted            Baker            2                    Yes

我真的试图解决这个问题,但我开始没有想法了。任何帮助都将非常感谢...谢谢!

2 个答案:

答案 0 :(得分:0)

也许

SELECT first_name, last_name, COUNT( DISTINCT collection) AS cnt
FROM yourtable
GROUP BY first_name, last_name

COUNT DISTINCT将消除重复的Bob / Jones / 1记录。

答案 1 :(得分:0)

这是你期待的吗?

SELECT u1.first_name, u1.last_name, u1.collection FROM users u1 
WHERE u1.collection = (SELECT min(u2.collection) 
    FROM users u2 WHERE u1.first_name = u2.first_name
    AND u1.last_name = u2.last_name);

http://www.sqlfiddle.com/#!2/bd086/7