我在employee表中有名字。我想提取最小长度的名称。如果数据库包含两个最小长度的名称,则应选择这两个名称。或者第二个问题根据字母顺序选择一个名字。当我进行类似查询时:
Select MIN(Name) From Employee; Result:-Bharti
为什么会这样?
Name|Length Meera|5 Sameer|6 Bharti|6 Mahak|5 Bharti|6 Meera|5
xghobddn1#
MIN() 给出最小的字符串,而不是最短的字符串。要获得具有最短字符串的行,可以按长度排序,并仅保留前几行。在sql server中:
MIN()
select top(1) with ties * from mytable order by len(name)
在数据库中支持 fetch 行限制条款:
fetch
select * from mytable order by len(name) fetch first row with ties
如果这些选项都不可用:
select * from mytable t where len(name) = (select min(len(name)) from mytable)
获取字符串长度的函数因数据库而异。
deyfvvtc2#
`您似乎在问:为什么下面的查询返回一行?
Select MIN(Name) From Employee;
这个 MIN() 在 SELECT 使其成为聚合查询。它没有 GROUP BY . 根据sql的定义,在本例中,表中的所有行都被视为一个组,而聚合查询则不包含 GROUP BY 总是返回一行。如果希望所有行都具有最小长度,则该长度需要出现在某个位置,例如:
SELECT
GROUP BY
select e.name from employee e where len(e.name) = (select min(len(e2.name)) from employee);
如果您想在最短的名字中按字母顺序排列名字,有多种方法,但一种简单的方法是:
select e.name from employee e order by len(e.name), name fetch first 1 row only;
2条答案
按热度按时间xghobddn1#
MIN()
给出最小的字符串,而不是最短的字符串。要获得具有最短字符串的行,可以按长度排序,并仅保留前几行。
在sql server中:
在数据库中支持
fetch
行限制条款:如果这些选项都不可用:
获取字符串长度的函数因数据库而异。
deyfvvtc2#
`您似乎在问:为什么下面的查询返回一行?
这个
MIN()
在SELECT
使其成为聚合查询。它没有GROUP BY
. 根据sql的定义,在本例中,表中的所有行都被视为一个组,而聚合查询则不包含GROUP BY
总是返回一行。如果希望所有行都具有最小长度,则该长度需要出现在某个位置,例如:
如果您想在最短的名字中按字母顺序排列名字,有多种方法,但一种简单的方法是: