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 |
--------------------------------------------
答案 0 :(得分: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
);
答案 1 :(得分:0)
首先,将名为Group_Name
的字段更改为SELECT * FROM products
WHERE sold = 0
AND ID IN (SELECT MIN(ID) FROM products WHERE sold = 0 GROUP BY Group_Name)
。 GROUP是一个保留关键字,如果它现在没有引起你的问题,它可能会在以后发生。
其次,你应该问问自己你真正追求的是什么。以下查询应生成所需的结果。它添加了一个附加条件,其中返回的ID是每个组中编号最小的ID。
SELECT DISTINCT Group_Name, Name
FROM products
WHERE sold = 0
ORDER BY Group_Name, Name
为什么你想这样呢?这不是正常的期望结束状态。你应该问问自己为什么要关心身份证。看起来您的目标是找出哪些产品没有出售任何东西。在这种情况下,我会建议这样做:
$pdf
答案 2 :(得分:0)
我现在在结果中使用语句 GROUP BY ,
SELECT * FROM products WHERE sold = 0 GROUP BY group
找到解决方案,我只得到每个组的一条记录和最小ID没有添加任何其他声明,并且在我的真实表中我使用 product_group 而不是组,因为它是一个保留字。
答案 3 :(得分:-2)
试试这个:
SELECT `ID`, `Group`, `Name`, `Sold` FROM products WHERE sold = 0 GROUP BY `Group`;