SQL选择不同的子串,其中像muddleup howto

时间:2011-06-10 04:38:33

标签: sql select distinct substring max

我有一个表格,其字段与此类似:

ANIMAL
========
FISH 54
FISH 30
DOG 12
CAT 65
CAT 09
BIRD 10
FISH 31
DOG 10

该字段后来可能会添加新动物,例如

GOAT 72
DOG 20

我想做的是做一个SELECT查询,每个动物名称返回一个唯一的行,返回一个数据集,每个动物类型有一行,我稍后可以解析它以列出动物出现在我的桌子里。

所以,在魔术之后,我会有

FISH 54
DOG 12
CAT 65
BIRD 10
GOAT 72

...我将从中列出我的名单。

到目前为止,我一直在使用子查询SELECT DISTINCTSUBSTRING()进行混淆,但我觉得我提出的任何结果都可能与SO hive的威力相比显得苍白无力心神。有人可以帮忙吗?

更新

如果有帮助,我失败的尝试就说明了我想做的事情:

SELECT DISTINCT substring(animal,1,4) FROM table;

现在我没有全名,只是一个子串。 :(

4 个答案:

答案 0 :(得分:6)

这适用于SQL Server。如果您使用其他内容,则需要确定leftcharindex的相应功能。左边当然可以用子串替换。

select distinct left(T.Animal, charindex(' ', T.Animal, 1)-1)
from YourTable as T

结果:

-------------------------
BIRD
CAT
DOG
FISH

在MySQL中,您可以使用leftlocate。 (代码未经测试)

select distinct left(T.Animal, locate(' ', T.Animal, 1)-1)
from YourTable as T

答案 1 :(得分:3)

您还可以使用以下内容获取动物名称列表:

SELECT DISTINCT SUBSTRING_INDEX(animal, ' ', 1) FROM table_name;

答案 2 :(得分:1)

为什么不

SELECT id, animal, value FROM table GROUP BY animal, id HAVING id = MIN(id)

这应该会为您提供表格中的动物列表,每只动物都输入第一个值。

如果您不需要,请选择该值,然后执行:

SELECT animal FROM table GROUP BY animal

答案 3 :(得分:1)

SELECT Name, Max(No)
FROM Table
Group By Name