SQL - 如何选择具有最长字符串名称的字段的所有列

时间:2015-12-14 22:13:57

标签: sql wildcard

我知道如何找到列中最长字符串的长度以及如何选择它。但我无法弄清楚如何查询所有列

我在W3School的SQL控制台中试过这个

SELECT *, MAX(LEN(Address)) as MaxLengthOfAddress
FROM Customers;

我收到此错误消息

  

无法对使用'*'选择的字段进行分组。

但是,如果我只是获得最大地址长度,它就可以工作

SELECT MAX(LEN(Address)) as MaxLengthOfAddress
FROM Customers;

我使用了通配符运算符*,因为除了这个最大长度列之外,我想获得每一列。我不确定为什么这不起作用。

3 个答案:

答案 0 :(得分:2)

您需要找到MAX(LEN(Address)),然后使用它来查找地址为该长度的记录。如,

SELECT * 
FROM   Customers
WHERE  LEN(Address) = ( SELECT MAX(LEN(Address))
                        FROM   Customers );

您没有使用特定的RDBMS标记您的问题,但根据您使用的内容,可以肯定的是,有更有效的方法可以做到这一点。但我希望这说明了基本概念。

答案 1 :(得分:1)

你的where子句中需要一个子查询。 试试这样:

SELECT *
  FROM Customers
 WHERE LEN(Adress) >= (SELECT MAX(LEN(Address))
                         FROM Customers
                      )
;

答案 2 :(得分:1)

你可以这样做:

SELECT TOP 1 C.*
FROM         Customers C
ORDER BY     LEN(Address) desc

订单确保顶部选择将具有最大地址长度,而使用TOP允许您选择所有列而没有任何不必要的复杂性。