[英]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
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.