![](/img/trans.png)
[英]How can I get 5 records for each 'category' with one select in MySQL?
[英]How to select only one record of each category?
Products :
--------------------------------------------
| ID | Group | Name | Sold |
--------------------------------------------
| 1 | A | Dell | 0 |
--------------------------------------------
| 2 | A | Dell | 0 |
--------------------------------------------
| 3 | B | Dell | 1 |
--------------------------------------------
| 4 | B | Dell | 1 |
--------------------------------------------
| 5 | C | Dell | 0 |
--------------------------------------------
| 6 | C | Dell | 1 |
--------------------------------------------
大家好,我有一個存儲在MySql中的表(產品),其中有許多記錄,現在我正在使用SELECT * FROM products WHERE sold = 0
,結果我得到:
--------------------------------------------
| ID | Group | Name | Sold |
--------------------------------------------
| 1 | A | Dell | 0 |
--------------------------------------------
| 2 | A | Dell | 0 |
--------------------------------------------
| 5 | C | Dell | 0 |
--------------------------------------------
我只想從每個組中獲取一條記錄,所以結果將像:
--------------------------------------------
| ID | Group | Name | Sold |
--------------------------------------------
| 1 | A | Dell | 0 |
--------------------------------------------
| 5 | C | Dell | 0 |
--------------------------------------------
您可以通過使用distinct
子句並刪除id
列來輕松地做到這一點。 如果您要保留id
列,則需要指定如何選擇要保留的id
。
select distinct
`group`
, name
, sold
from
products
where
sold = 0;
為了使id
最小的行(如您的示例所示)可以使用下面示例的內容。
select
id
, `group`
, name
, sold
from
products
where
sold = 0
and id = (
select
min(p.id)
from
products p
where
p.`group` = products.`group`
and p.sold = 0
);
首先,將名為Group
的字段更改為Group_Name
。 GROUP是保留的關鍵字,如果現在不引起問題,則稍后可能會出現。
其次,你應該問自己自己到底在追求什么。 以下查詢應生成您想要的結果。 它添加了一個附加條件,其中返回的ID是每個組中編號最小的ID。
SELECT * FROM products
WHERE sold = 0
AND ID IN (SELECT MIN(ID) FROM products WHERE sold = 0 GROUP BY Group_Name)
但是,為什么要這樣呢? 那不是正常的期望結束狀態。 您應該問自己為什么要關心ID。 您的目標似乎是找出哪些產品沒有售出任何東西。 在這種情況下,我建議您改為:
SELECT DISTINCT Group_Name, Name
FROM products
WHERE sold = 0
ORDER BY Group_Name, Name
我通過使用語句GROUP BY找到了解決方案,
SELECT * FROM products WHERE sold = 0 GROUP BY group
在現在的結果中,我只為每個組獲得一條記錄,並且沒有添加任何其他語句就獲得了最小id,並且在我的真實表中,我使用product_group而不是group,因為這是保留字。
嘗試這個:
SELECT `ID`, `Group`, `Name`, `Sold` FROM products WHERE sold = 0 GROUP BY `Group`;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.