我在解决如何从以下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
我真的试图解决这个问题,但我开始没有想法了。任何帮助都将非常感谢...谢谢!
答案 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);