MYSQL 按一列对结果进行分组,但将唯一的第二列分开

标签 mysql sql

我知道那里有类似的问题,但我在其中找不到这个特殊案例。如果有人知道这个问题的答案在哪里,请给我一个链接。否则就到这里。

我有一个表,其中有两个我感兴趣的字段 - 代码和 id。尽管有一个 company 字段与 id 字段组合形成主键,但这些都不是唯一的。

我需要一份所有代码和名称的列表,其中多个名称与同一代码相关联。所以如果我的约会看起来像这样:

| code          | name          | company                                            |
+---------------+---------------+----------------------------------------------------+
| 00009         | name          | 1                                                  |
| 00009         | name          | 2                                                  |
| 00009         | name          | 3                                                  |
| 00009         | name          | 4                                                  |
| 00009         | diff name     | 1                                                  |
| 00014         | Foo           | 2                                                  |
| 00014         | foo           | 3                                                  |
| 00014         | foo           | 4                                                  |
| 00014         | foo           | 5                                                  |
| 00014         | foo           | 6                                                  |
| 00015         | barbaz        | 1                                                  |
| 00015         | barbaz        | 2                                                  |
| 00015         | barbaz        | 3                                                  |
| 00015         | barbaz        | 4                                                  |
| 00015         | bar baz       | 5                                                  |
| 00017         | foo           | 1                                                  |
| 00018         | bar           | 1                                                  |

我也需要我的结果如下所示:

| code          | name                                                              |
+---------------+-------------------------------------------------------------------+
| 00009         | name                                                              |
| 00009         | diff name                                                         |
| 00014         | Foo                                                               |
| 00014         | foo                                                               |
| 00015         | barbaz                                                            |
| 00015         | bar baz                                                           |

我尝试过多种方法,包括

SELECT DISTINCT t1.code, t1.name from items t1 
  inner join (select t2.code from items t2 group by t2.name ) t2 
  on (t1.code = t2.code)    
  group by t1.code order by t1.code;

这当然是错误的。感谢您的任何见解!

[编辑]我忘了提及一个细节。我只想列出给定代码具有多个唯一名称条目的结果。我已经更新了初始数据(这不会改变我想要的结果)。

[已编辑错别字]

最佳答案

将 HAVING 与 COUNT(DISTINCT) 结合使用:

SELECT code, name
FROM items
WHERE code IN (
    SELECT code 
    FROM items
    GROUP BY code 
    HAVING count(DISTINCT name) > 1
) t1
ORDER BY code, name

关于MYSQL 按一列对结果进行分组,但将唯一的第二列分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13751993/

相关文章:

mysql - mysql命令有什么问题?

php - 用于获取上一行中下一条记录值的 SQL 查询

mysql - 访问当前用户的数据库行

MYSQL UPDATE SET 在同一列上但具有多个 WHERE 子句

sql - oracle中外键同表时如何添加级联删除

MySQL - 如何从字符串中接收子字符串表

java - MySQL/Hibernate SQLQuery 如何将 unsigned int(10) 转换为smallint?

javascript - 如何用jquery查看弹出框的大量数据?

php - 动态表迭代 PHP MySql

mysql - Ruby on Rails 表名 : what's permitted?