2015-12-14 122 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萬客戶中,我假設聚合子查詢仍然只會受益匪淺。 –

相關問題