如何选择具有偶数ID编号的列?

16

我正尝试解决 Hackerrank 问题Weather Observation Station 3,该问题陈述如下:

enter image description here

我想出了以下解决方案:

SELECT CITY
FROM STATION
WHERE MOD(ID, 2) = 0

但是当我尝试运行它时,编译器会提示“错误答案”。我不知道这个查询有什么问题?


1
问题仍然有一个部分:从你的答案中排除重复项 - Prisoner
1
必须排除重复项。尝试使用“Distinct”。 - JohnHC
答案就在这里:https://www.hackerrank.com/challenges/weather-observation-station-3/forum - user330315
9个回答

23
SELECT DISTINCT CITY
FROM STATION
WHERE MOD(ID, 2) = 0

12

你可以尝试这个查询:

SELECT DISTINCT CITY FROM STATION WHERE (ID % 2) = 0 

这个在Oracle中可行吗?该问题被标记为[tag:Oracle]。难道你不需要使用MOD()函数,就像被接受的答案中所建议的那样吗? - Jeremy Caney

5

对于DB2:

SELECT DISTINCT CITY 
FROM STATION
WHERE MOD(ID, 2) = 0;

对于Oracle:

SELECT DISTINCT CITY 
FROM STATION
WHERE MOD(ID, 2) = 0;

针对 MySQL:

SELECT DISTINCT CITY 
FROM STATION
WHERE MOD(ID, 2) = 0;

--或--

SELECT DISTINCT CITY 
FROM STATION
WHERE ID%2=0;

MSSQL相关:

SELECT DISTINCT CITY 
FROM STATION
WHERE ID%2=0;


2
SELECT DISTINCT CITY FROM STATION WHERE (ID % 2) = 0;
  • DISTINCT用于不允许重复项,
  • (Id % 2)告诉SQL将Id除以2并返回余数。
  • 由于我们只寻找偶数值,因此将其设置为=0,因为2%2=04%2=0等等。
  • 如果我们正在寻找奇数编号的Id,则应使用=1,因为将奇数除以2时总会有余数1

这是一个很好的解释。但是在Oracle中会起作用吗?该问题标记为[tag:Oracle],而不是[tag:mysql]或[tag:mssql]。难道你不需要使用MOD()函数,正如被接受的答案所建议的那样吗? - Jeremy Caney

1
MYSQL:
SELECT DISTINCT CITY FROM STATION WHERE (ID % 2)=0;

ORACLE:
SELECT DISTINCT CITY FROM STATION WHERE MOD(ID, 2)=0;

0

我建议另一种解决方案:

    SELECT DISTINCT CITY
    FROM STATION
    WHERE ID LIKE '%0' OR ID LIKE '%2' OR ID LIKE '%4' OR ID LIKE '%6' OR ID LIKE '%8';

1
你能否在回答中提供更多解释,帮助我们更好地理解你解决的问题以及如何解决它? - Plutian
这似乎比其他建议的答案更昂贵,而且使用简单的模数函数或运算符要不可读得多。 - Jeremy Caney

0

在MSSQL中:

SELECT CITY
FROM STATION
WHERE (ID % 2) = 0
GROUP BY CITY 

该问题被标记为 [tag:Oracle],而不是 [tag:mssql]。 - Jeremy Caney

0
如果问题是“仅查询STATION中偶数ID编号的CITY名称列表”,那么答案就是:
select CITY from station where ID % 2 = 0;

但是由于进一步的标准,比如“但必须从你的答案中排除重复项。”你的答案应该是

select DISTINCT CITY from station where ID % 2 = 0;

这个在Oracle中可行吗?问题标记为[tag:Oracle],而不是[tag:mysql]或[tag:mssql]。难道你不需要使用MOD()函数,就像被接受的答案中所建议的那样吗? - Jeremy Caney

-1

使用带有case-when语句的子查询的SQL Server:

SELECT DISTINCT CITY FROM STATION WHERE ID IN (SELECT 
                                               CASE
                                                   WHEN ABS(ID%2) = 0 THEN ID
                                               END 
                                               FROM STATION);

为什么我们应该使用子查询而不是直接检查ID?而且,ABS是否多余,因为您只想要零作为结果?我很好奇您的理由。 - Matteo Steccolini
在其中使用ABS没有任何问题。在执行任何类型的算术运算时,使用ABS是标准做法,它将负数转换为正数。关于子查询,我尝试了不同的方法来解决它,而且成功了。如果有人想寻找不同的方法,他们可以尝试一下。 - Ritabrata Goswami

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接