min()函数

yvt65v4c  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(315)

我在employee表中有名字。我想提取最小长度的名称。如果数据库包含两个最小长度的名称,则应选择这两个名称。或者第二个问题根据字母顺序选择一个名字。当我进行类似查询时:

Select MIN(Name) From Employee;

Result:-Bharti

为什么会这样?

Name|Length
Meera|5
Sameer|6
Bharti|6
Mahak|5
Bharti|6
Meera|5
xghobddn

xghobddn1#

MIN() 给出最小的字符串,而不是最短的字符串。
要获得具有最短字符串的行,可以按长度排序,并仅保留前几行。
在sql server中:

select top(1) with ties *
from mytable
order by len(name)

在数据库中支持 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)

获取字符串长度的函数因数据库而异。

deyfvvtc

deyfvvtc2#

`您似乎在问:为什么下面的查询返回一行?

Select MIN(Name)
From Employee;

这个 MIN()SELECT 使其成为聚合查询。它没有 GROUP BY . 根据sql的定义,在本例中,表中的所有行都被视为一个组,而聚合查询则不包含 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;

相关问题