我坐了几个小时试图解决特定问题,但我无法解决。最后,我决定把它贴在这里。这里有一些记录,

╔════════╦════════════╦═════════╦══════════════════╗
║ AUTOID ║ PERSONNAME ║ FLOWER  ║ Other columns... ║
╠════════╬════════════╬═════════╬══════════════════╣
║      1 ║ Alex       ║ Rose    ║                  ║
║      2 ║ Rene       ║ Rose    ║                  ║
║      3 ║ Rene       ║ Jasmin  ║                  ║
║      4 ║ Darwin     ║ Rose    ║                  ║
║      5 ║ Alex       ║ Rose    ║                  ║
║      6 ║ Darwin     ║ Jasmin  ║                  ║
║      7 ║ Alex       ║ Rose    ║                  ║
║      8 ║ Rene       ║ Jasmin  ║                  ║
║      9 ║ Hello      ║ World   ║                  ║
║     10 ║ Hello      ║ World   ║                  ║
╚════════╩════════════╩═════════╩══════════════════╝

我怎样才能得到这个结果, 在他/她的所有记录中只有一种花的人
╔════════════╦════════════╗
║ PERSONNAME ║ FLOWERNAME ║
╠════════════╬════════════╣
║ Alex       ║ Rose       ║
║ Hello      ║ World      ║
╚════════════╩════════════╝

我尝试过的最好的一个是下面的这个查询,但仍然无法正常工作。
SELECT  DISTINCT t1.PersonName, t1.Flower
FROM    TableName t1
        INNER JOIN
        (
            SELECT  personname, COUNT(DISTINCT flower) totals
            FROM    tableName
            GROUP   BY personname, Flower
        )  t2 ON t1.personname = t2.personname and
                    t2.totals = 1

任何想法?

最佳答案

您可以在此问题上使用 GROUP BY 子句、HAVING 子句和 COUNT(),无需加入子查询

SELECT  PersonName, MAX(Flower) flowerName
FROM    TableName
GROUP   BY PersonName
HAVING  COUNT(DISTINCT Flower) = 1
  • SQLFiddle Demo
  • 关于mysql - 获取一种且只有一种类型的记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14651761/

    10-12 17:58