为什么我的研究站点上的问题解决方案不被接受并显示“错误答案”?
问题出在这里-https://www.hackerrank.com/challenges/the-pads/problem/:
生成以下两个结果集:
查询
OCCUPATIONS
中所有名称的按字母顺序排列的列表,紧随其后的是每个专业的第一个字母作为括号(即:括在括号中)。例如:AnActorName(A),ADoctorName(D),AProfessorName(P)和ASingerName(S)。查询
OCCUPATIONS
中每个职业的出现次数。按升序对出现的事件进行排序,并以以下格式输出它们:共有[occupation_count]个[occupation] s。
其中[occupation_count]是
OCCUPATIONS
中某职业的出现次数,[occupation]是小写职业名称。如果一个以上的职业具有相同的[occupation_count],则应按字母顺序排列。
我的查询是:
SELECT
CAST(NAME, CASE
WHEN occupation = 'Actor' THEN '(A)'
WHEN occupation = 'Doctor' THEN '(D)'
WHEN occupation = 'Professor' THEN '(P)'
WHEN occupation = 'Singer' THEN '(S)'
END)
FROM
occupations;
和
SELECT
CASE
WHEN occupation = 'Actor'
THEN CONCAT('There are a total of ', COUNT(occupation), ' ', LOWER(occupation), 's.')
WHEN occupation = 'Doctor'
THEN CONCAT('There are a total of ', COUNT(occupation), ' ', LOWER(occupation), 's.')
WHEN occupation = 'Singer'
THEN CONCAT('There are a total of ', COUNT(occupation), ' ', LOWER(occupation), 's.')
WHEN occupation = 'Professor'
THEN CONCAT('There are a total of ', COUNT(occupation), ' ', LOWER(occupation), 's.')
END
FROM
occupations
GROUP BY
occupation
ORDER BY
COUNT(occupation), occupation;
该查询具有与HackerRank上的示例相同的输出。我在做什么错了?
答案 0 :(得分:1)
两个问题:
第一个查询:
SELECT CONCAT(Name, '(', substr(Occupation, 1, 1), ')')
FROM Occupations
ORDER BY Name;
您的第二个查询再次期望一些静态职业,但是当测试数据中的职业不是其中之一时,将返回null
。请勿在此处使用CASE
。
SELECT CONCAT('There are a total of ', COUNT(Occupation), ' ', LOWER(Occupation), 's.')
FROM Occupations
GROUP BY Occupation
ORDER BY COUNT(Occupation),
Occupation;
答案 1 :(得分:1)
说明1:
在第一部分中,当需要仅将名称和职业一起打印时,我们有一些情况可以检查职业并相应地加上后缀。
我们使用order by子句根据名称的升序对结果进行排序。
select
case
when Occupation = "Doctor" then concat(name,"(D)")
when Occupation = "Actor" then concat(name,"(A)")
when Occupation = "Professor" then concat(name,"(P)")
when Occupation = "Singer" then concat(name,"(S)")
else 'hello'
end
from Occupations
order by name;
说明2:
在这种情况下,所有查询所要做的就是将结果与占用进行分组并打印所需的字符串。
select "There are a total of ",count(*) as count1,concat(lower(Occupation),"s.") from Occupations group by Occupation order by count1;
答案 2 :(得分:0)
第一个查询
SELECT NAME||'('||RPAD(OCCUPATION,1)||')' FROM OCCUPATIONS ORDER BY NAME;
第二个查询
SELECT 'There are a total of', COUNT(OCCUPATION),
CASE
WHEN OCCUPATION = 'Doctor' THEN 'doctors.'
WHEN OCCUPATION = 'Professor' THEN 'professors.'
WHEN OCCUPATION = 'Actor' THEN 'actors.'
WHEN OCCUPATION = 'Singer' THEN 'singers.'
end
FROM OCCUPATIONS GROUP BY OCCUPATION order by count(OCCUPATION),OCCUPATION;
答案 3 :(得分:0)
以下查询对我有用:
SELECT NAME || '(' || SUBSTR(OCCUPATION,1,1)||')' FROM OCCUPATIONS
UNION
SELECT 'There are a total of '|| count(occupation) || ' ' || LOWER(occupation)||'s.' FROM OCCUPATIONS
GROUP BY OCCUPATION;