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