【问题标题】:SQL - How to select all columns of the field with the longest string nameSQL - 如何选择具有最长字符串名称的字段的所有列
【发布时间】:2015-12-14 22:13:56
【问题描述】:

我知道如何找到一列最长字符串的长度以及如何选择它。但我想不通的是如何查询所有列

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

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

我收到此错误消息

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

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

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

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

【问题讨论】:

  • 您使用的是哪个 DBMS?这可以使用窗口函数轻松完成
  • 我实际上没有使用一个。我只是在学习 W3Schools 的教程。所以我会说常规 SQL

标签: sql wildcard


【解决方案1】:

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

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

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

【讨论】:

  • 子查询是一个绝妙的解决方案。我自己今天才知道这一点。
【解决方案2】:

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

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

【讨论】:

  • >= 中的> 没用。 = 就够了,不能有任何长度大于最大长度的值。
【解决方案3】:

你可以这样做:

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

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

【讨论】:

  • 除了语法不适用于所有数据库并且 OP 没有指定。另外,这样会有效吗?为什么要对包含 200 万客户的列表进行排序,只是为了获得第一名?
  • 他指定他正在使用 W3Schools,它适用。而且他没有具体说明他有 200 万客户,所以我提供了我认为最简单的解决方案,不一定是最有效的解决方案。在 200 万客户时,我假设聚合子查询仍然只能微不足道地受益于排序。
猜你喜欢
  • 1970-01-01
  • 2022-01-09
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 2022-12-24
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
相关资源
最近更新 更多