Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何为列选择具有最大值的行_Mysql_Sql - Fatal编程技术网

Mysql 如何为列选择具有最大值的行

Mysql 如何为列选择具有最大值的行,mysql,sql,Mysql,Sql,我在Hackerrank上做这个挑战: 我是SQL的初学者,我正在尝试查询所有具有列的最大值的行,最大值只能通过MAX获得。因此,我尝试以下方法: SELECT CITY, LENGTH(CITY) AS citylength FROM STATION WHERE LENGTH(CITY) = (SELECT MIN(CITY) FROM STATION) 我会犯错误 我在谷歌上查过关于子查询的内容,但我还不太习惯知道它是如何工作的,所以我需要你们的帮助。谢谢 总而言之,我需要一个查询,可以获

我在Hackerrank上做这个挑战:

我是SQL的初学者,我正在尝试查询所有具有列的最大值的行,最大值只能通过MAX获得。因此,我尝试以下方法:

SELECT CITY, LENGTH(CITY) AS citylength
FROM STATION
WHERE LENGTH(CITY) = (SELECT MIN(CITY) FROM STATION)
我会犯错误

我在谷歌上查过关于子查询的内容,但我还不太习惯知道它是如何工作的,所以我需要你们的帮助。谢谢

总而言之,我需要一个查询,可以获取表中的行,该表的最大值是通过MAX子句获得的。

这是有效的:

SELECT CITY,LENGTH(CITY) 
FROM STATION  
WHERE LENGTH(CITY) = (SELECT MIN(LENGTH(CITY)) M FROM STATION);
这项工作:

SELECT CITY,LENGTH(CITY) 
FROM STATION  
WHERE LENGTH(CITY) = (SELECT MIN(LENGTH(CITY)) M FROM STATION);

这在没有子查询的情况下工作

SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY 2,1
LIMIT 1

这在没有子查询的情况下工作

SELECT CITY, LENGTH(CITY)
FROM STATION
ORDER BY 2,1
LIMIT 1

您需要找到两个不同的结果:

长度最大的城市,如果是平局,则为字母表中的第一个城市 长度最小的城市,如果是平局,则为字母表中的第一个城市 这意味着两个不同的查询,您可以使用UNIONALL将它们粘合在一起

(
  select concat(city, ' ', length(city))
  from station 
  order by length(city), city limit 1
)
union all
(
  select concat(city, ' ', length(city))
  from station 
  order by length(city) desc, city limit 1
);
正如草莓所指出的:为了放置两个ORDERBY子句,需要使用括号,每个查询部分一个。否则,对于整个查询,只能在末尾放置一个ORDERBY子句


在您的查询中,您正在比较LENGTHCITY,即一个包含名称长度的整数和MINCITY,即城市名称本身,这当然不起作用。你得和MINLENGTHCITY比较一下。然后对最大值执行相同操作,然后使用UNION ALL。但是,这并不能解决“限制”查询所解决的领带问题。

要求您查找两个不同的结果:

(SELECT CONCAT(city,' ',LENGTH(city)) city, 'shortest' category FROM stations ORDER BY LENGTH(city),city LIMIT 1)
UNION ALL
(SELECT CONCAT(city,' ',LENGTH(city)), 'longest' FROM stations ORDER BY LENGTH(city) DESC,city LIMIT 1);
长度最大的城市,如果是平局,则为字母表中的第一个城市 长度最小的城市,如果是平局,则为字母表中的第一个城市 这意味着两个不同的查询,您可以使用UNIONALL将它们粘合在一起

(
  select concat(city, ' ', length(city))
  from station 
  order by length(city), city limit 1
)
union all
(
  select concat(city, ' ', length(city))
  from station 
  order by length(city) desc, city limit 1
);
正如草莓所指出的:为了放置两个ORDERBY子句,需要使用括号,每个查询部分一个。否则,对于整个查询,只能在末尾放置一个ORDERBY子句

在您的查询中,您正在比较LENGTHCITY,即一个包含名称长度的整数和MINCITY,即城市名称本身,这当然不起作用。你得和MINLENGTHCITY比较一下。然后对最大值执行相同操作,然后使用UNION ALL。但是,这并不能解决“限制查询”所解决的领带问题。

这是正确的:

(SELECT CONCAT(city,' ',LENGTH(city)) city, 'shortest' category FROM stations ORDER BY LENGTH(city),city LIMIT 1)
UNION ALL
(SELECT CONCAT(city,' ',LENGTH(city)), 'longest' FROM stations ORDER BY LENGTH(city) DESC,city LIMIT 1);
select city, length(city) 
from station 
where length(city) = (select min(length(city)) as m from station)
order by city ASC
limit 1;
这是正确的:

select city, length(city) 
from station 
where length(city) = (select min(length(city)) as m from station)
order by city ASC
limit 1;

请发布您的CREATE TABLE语句和所需的输出。当然还有错误的性质。表格在链接中,我尝试粘贴它,但结果不好。对于错误,大多数情况下,我没有输出,但有时会出现语法错误。请发布您的CREATE TABLE语句和所需的输出。当然还有错误的性质。表格在链接中,我尝试粘贴它,但结果不好。对于错误,大多数情况下,我没有输出,但有时会出现语法错误,将选择所有长度最小的城市。挑战的第二部分说,如果有超过1个匹配的最小值,则需要选择其中的最小字母。这将选择所有长度最小的城市,挑战的第二部分说,如果有超过1个匹配的最小值,则需要选择其中的最小值。参见Thorsten的答案-您需要联合所有人来覆盖最大值和最小值相同的情况。您应该对您的答案的作用以及为什么它起作用给出一个小的解释。参见Thorsten的答案-您需要联合所有人来完成涵盖最大值和最小值相同的情况。你应该对你的答案做一个小的解释,以及为什么它有效。