繁体   English   中英

MySQL:Select 行,其中字段包含唯一值

[英]MySQL: Select rows where field contains unique value

在 MySQL 数据库中,我有一个包含各种产品数据的products表,包括company

ID 姓名 公司
1 产品一 AAA
2 另一种产品 BBB
3 又一款产品 CCC
4 项目 ZZZ BBB
5 产品A AAA
6 产品 uT DDD
7 产品 2z AAA

现在我想建立一个查询,它将 select 所有具有唯一公司的产品 - 我的意思是一个公司,它在整个表中只出现一次。 在上面的例子中——第 3 行是 CCC 公司,第 6 行是公司 DDD。

我怎样才能做到这一点?

您可以使用count(id) over(partition by company)

select id, name, company from
(select id, name, company , count(id) over(partition by company) cnt
from products) t
where cnt = 1;

小提琴

您可以使用 GROUP BY... HAVING 子句查找单独的公司,然后按公司名称加入它们。

SELECT * FROM products p
JOIN 
(SELECT company FROM products
GROUP BY company
HAVING COUNT(*) = 1) pg
ON p.company = pg.company

SQLFiddle在这里

MySQL 实际上会让你做这个更简单的查询。 这在这种情况下有效,因为您要查找的组中只有一行。 但是,如果您正在为拥有 2 种产品的公司寻找所有产品,那么更简单的版本将不再适用,因为您只会得到一排。 原始查询将继续与其他 HAVING 子句一起使用,例如 HAVING COUNT(*) > 10

SELECT id, product, company
FROM products
GROUP BY company
HAVING COUNT(*) = 1

您需要按公司分组,然后仅 select 具有一家公司的行:

SELECT `id`, `name`, `company` FROM `products` GROUP BY `company` HAVING COUNT(*)=1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM