所以我有一张满是汽车的桌子:
假设有4个闪避毒蛇,数据库中会有4个条目,除了carID之外都是相同的。
carID | carname | carmodel | colour | reg
--------------------------------------------------
1 | viper | dodge | red | 123
2 | viper | dodge | red | 124
3 | viper | dodge | red | 125
4 | viper | dodge | red | 126
5 | R8 | audi | blue | 127
6 | R8 | audi | blue | 128
当用户搜索汽车时,我想只显示一个闪避毒蛇。但是,我想从该行和所有其他不同的汽车中提取所有信息。
所以我想要的输出是:
carID | carname | carmodel | colour | reg
--------------------------------------------------
1 | viper | dodge | red | 123
5 | R8 | audi | blue | 127
如果我这样做:
SELECT DISTINCT * FROM cars
它会撤回所有条目。
SELECT DISTINCT carname FROM cars
只撤回其中一个,但我只有车名。
有这样的:
SELECT * FROM cars ORDER BY DISTINCT carname
或类似的东西?
答案 0 :(得分:3)
我不明白,你的意思是分组吗?
SELECT MAX(CarId) as carId, carname, carmodel, colour FROM cars GROUP BY carname, carmodel, colour;
答案 1 :(得分:3)
如果您想要返回carId
,那么您可以使用以下内容为每个相同的min(carid)
返回carname
,等等:
select min(carId) as carId, carname, carmodel, colour
from cars
group by carname, carmodel, colour
您将看到我将carId
置于聚合函数中,这是为了确保MySQL始终返回carId
列的预期值。如果您没有GROUP BY
或聚合SELECT列表中的项目,则可能会返回意外结果。 (见MySQL Extensions to GROUP BY
)
来自MySQL文档:
MySQL扩展了GROUP BY的使用,因此选择列表可以引用GROUP BY子句中未命名的非聚合列。 ...您可以通过避免不必要的列排序和分组来使用此功能来获得更好的性能。但是,当GROUP BY中未命名的每个非聚合列中的所有值对于每个组都相同时,这非常有用。服务器可以自由选择每个组中的任何值,因此除非它们相同,否则所选的值是不确定的。此外,添加ORDER BY子句不会影响每个组中值的选择。选择值后会对结果集进行排序,而ORDER BY不会影响服务器选择的值。
答案 2 :(得分:1)
试试这个:
SELECT DISTINCT carname, otherCol1, otherCol2... FROM cars
当你编辑问题并希望显示你的car_id时,上述解决方案并不好。 你走了:
SELECT MIN(carId) AS carId, carname, carmodel, colour
FROM cars
GROUP BY carname, carmodel, colour
MIN或MAX SUM无论你使用什么,只需投射...感知你可以说