2015-12-14 20 views
1

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

我在W3School的SQL控制台试过这种

​​

我收到此错误信息

可以在字段分组与'选择*”。

但是,如果我只是通过自身获得最大地址长度它的工作原理

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

我用通配符*因为我想除了这个最大长度列获得每一列。我不知道为什么这不起作用。

+0

您正在使用哪些DBMS?这可以很容易地使用窗口功能 –

+0

我实际上没有使用一个。我只是遵循W3Schools的教程。所以我会说定期SQL –

回答

2

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

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

你没有标记与特定的RDBMS你的问题,但是这取决于你使用的是什么,这是一个肯定的赌注,有这样做的更有效的方式。但我希望这说明了基本概念。

+0

子查询是一个很好的解决方案。我今天了解到了这一点。 –

1

您需要在where子句中使用子查询。 尝试这样的:

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

'> ='中的'>'没用。 '='就足够了,在长度大于最大长度的地方不能有任何值。 –

+0

你是对的。这是个人的事情。 – Drizzt

1

你可以这样做:

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

通过确保为了使先头的选择将具有最大地址长度,同时使用TOP允许您选择没有任何所有列不必要的复杂性。

+0

除语法不适用于所有数据库且OP未指定。此外,这将是有效的?为什么要挑选200万名顾客名单来获得最佳名单? –

+0

他指定他正在使用W3Schools,它将为之工作。而且他没有详细说明他有200万个客户,所以我提供了我认为最简单的解决方案,而不一定是最高效的。在200万客户中,我假设聚合子查询仍然只会受益匪浅。 –

相关问题