2015-09-07 34 views
1

我正在做的事情Hackerrank这一挑战行:如何选择具有最大值为列

https://www.hackerrank.com/challenges/weather-observation-station-5

我在SQL初学者,我试图查询所有行对于一列的最大值,我只能通过MAX()获得最大值。所以我想这个:

SELECT CITY, LENGTH(CITY) AS citylength 
FROM STATION 
WHERE LENGTH(CITY) = (SELECT MIN(CITY) FROM STATION) 

我得到的错误。

我查看了谷歌有关子查询,但我不够习惯,知道它究竟是如何工作的,所以我需要你的帮助家伙。谢谢。

所以总结一下,我需要一个查询,它可以获得通过MAX()子句获得最大值的表上的行。

+1

请发表您的'CREATE语句TABLE'和所需的输出。 –

+1

当然还有错误的性质*。 –

+0

表格在链接中,我试图粘贴它,但结果不好。对于错误,大部分时间我没有输出,但有时我得到语法错误 –

回答

4

此作品,未经子查询

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

这工作:

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

这将选择所有城市的最小长度,挑战的第二部分说,如果有超过1个匹配的最小值,它需要选择那些词汇的最小值。 – PaulF

6

请你找到两个不同的结果:

  • 与最大长度的城市(和首先在字母表中打结)
  • 城市与最小长度(并在领带的情况下,在字母表中的第一个)

这意味着两个不同的查询,它们与UNION ALL粘合在一起。

(
    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 
); 

草莓指出:你需要括号,以放置两个ORDER BY子句,每个查询部分之一。 (否则你只能将一个ORDER BY子句在结束整个查询。)

在你查询你持有的名称的长度和MIN(CITY)比较LENGTH(CITY),即一个整数,即城市的名字本身,它不能正常工作当然。您必须与MIN(LENGTH(CITY))进行比较。然后对最大值进行相同操作,然后使用UNION ALL。这并不能解决关系问题,但是,LIMIT查询可以解决这个问题。

0
(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); 
+0

请参阅Thorsten的答案 - 您需要“UNION ALL”来覆盖MAX&MIN相同的情况。 – PaulF

+2

你应该给出一个小的解释你的答案是什么以及它为什么起作用。 –

0
select TOP 1 concat(city, ' ' , len(city)) from station where len(city) = (select min(len(city)) from station) order by city asc; 

select TOP 1 concat(city, ' ' , len(city)) from station where len(city) = (select max(len(city)) from station) order by city desc; 
0
SELECT * FROM 
    (SELECT City, LENGTH(City) FROM STATION 
    ORDER BY LENGTH(City),city ASC) 
WHERE ROWNUM <= 1 
UNION ALL 
SELECT * FROM 
    (SELECT City, LENGTH(City) FROM STATION 
    ORDER BY LENGTH(City) DESC) 
WHERE ROWNUM <= 1; 
相关问题