仅返回SELECT语句中按字母顺序排列的第一个结果

3
我正在尝试对查询结果进行字母顺序排序,并仅返回第一个结果:
SELECT MIN(DisplayName) FROM [User] GROUP BY DisplayName

我认为上述方法可以解决问题。但是它仍然按字母顺序返回所有结果。我该如何获得期望的结果?

1
你只需要最顶部的记录吗?也许在获取数据之前和之后以你想要的格式展示一下数据的示例。 - Elias
解释一下,您查询了每个不同的DisplayName值(通过GROUP BY子句)的最小DisplayName值。 - HABO
我认为您想要每个DisplayName初始化一个记录,如果是这样,请参阅我的答案.. https://dev59.com/a3bZa4cB1Zd3GeqPLvOw#18858588 - Dhaval
9个回答

7

无需使用 GROUP BY

SELECT MIN(DisplayName) 
FROM [User] 

或:

SELECT TOP 1 DisplayName
FROM [User]
ORDER BY DisplayName

GROUP BY语句将按照指定的字段对数据进行分组,并返回每个不同的值或值组合。


为什么这里不需要使用GROUP BY? - jeppoo1
GROUP BY 在表中创建记录子集... 想象一下一个列出了美国50个州中每个城市的表格。如果按州分组,您将获得50条记录,每个州一条。因此,如果您只想要字母表顺序的第一个州,按州分组就行不通,因为它会给您50条记录而不是您想要的1条。如果您想要每个州字母表顺序的第一个城市,则按州分组是有意义的。 - Hart CO

1

只需要第一行吗?那就直接删掉 group by:

SELECT MIN(DisplayName) FROM [User]

1

要返回第一条记录,您可以尝试以下操作:

Select TOP 1 MIN(DisplayName) FROM [User] ORDER BY DisplayName

这将按升序排序并选择第一条记录。


1

如果您想将“结果”与另一个表连接起来,可以尝试以下不同的方法。

Use Northwind
GO


Select derived1.CustomerID, o.*  from dbo.Orders o
join
(
SELECT top 1 CustomerID FROM [Customers] customers ORder by CustomerID
) as derived1
on derived1.CustomerID = o.CustomerID

1
我认为您希望每个名称初始化一个记录,如果是这样,请尝试以下操作:
这是工作演示 SQLFiddle SELECT Left(DisplayName, 1), MIN(DisplayName) FROM [User] GROUP BY Left(DisplayName, 1)

0
Select city, length(city) from station 
where length(city) = (Select max(length(city))from station) 
order by city limit 1; 

Select city, length(city) from station 
where length(city) = (Select min(length(city)) from station) 
order by city limit 1;

2
请记住,Stack Overflow 不仅旨在解决当前的问题,还要帮助未来的读者找到类似问题的解决方案,这需要理解底层代码。对于我们社区中的初学者和不熟悉语法的成员来说,这尤其重要。鉴于此,您能否编辑您的答案,包括您正在做什么以及为什么您认为这是最佳方法的解释? - Jeremy Caney

0
如果您正在使用ORACLE作为您的SQL IDE;
SELECT City, LENGTH(City)
FROM (SELECT City
      FROM Station
     ORDER BY LENGTH(City), City)
WHERE ROWNUM = 1;
SELECT City, LENGTH(City)
FROM (SELECT City
      FROM Station
     ORDER BY LENGTH(City) DESC, City)
WHERE ROWNUM = 1;

0
select top 1 city, Len(city)
from station
group by Len(city), city
order by Len(city) asc

select top 1 city, Len(city)
from station
group by Len(city), city
order by Len(city) desc

这似乎并没有回答问题。 - Pang

-1
select city, 
       length(city) 
from (select city,
             length(city) 
      from station 
      where length(city) in (select min(length(city)) from station) 
order by city asc) where rownum<=1;

select city,
       length(city) 
from station 
where length (city) in (select max(length(city)) from station);

请给出代码片段的一些解释(并将其格式化以使阅读更容易)。如果您不稍微详细地说明一下您在这里做了什么,那么很难理解您试图告诉我们什么。 - jBuchholz
据我所知,您正在获取长度最小的城市列表的第一个结果。这不是 OP 想要实现的目标。 - jBuchholz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接