Вопрос SQL - почему я не могу решить проблему - PullRequest
0 голосов
/ 23 марта 2019

Почему мое решение проблемы на сайте исследования не принимается и показывает "неправильный ответ"?

Вот проблема - https://www.hackerrank.com/challenges/the-pads/problem/:

Создать следующие два набора результатов:

  1. Запрос в алфавитном порядке списка всех имен в OCCUPATIONS, за которым сразу же следует первая буква каждой профессии в скобках (т. Е. Заключенная в скобки). Например: AnActorName (A), ADoctorName (D), AProferorName (P) и ASingerName (S).

  2. Запрос количества вхождений каждого занятия в OCCUPATIONS. Отсортируйте вхождения в порядке возрастания и выведите их в следующем формате:

Всего [занятое_числение] [занятие] с.

где [профессия_счет] - число случаев занятия в OCCUPATIONS, а [занятие] - имя профессии в нижнем регистре. Если несколько профессий имеют одно и то же [занятие_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. Что я делаю не так?

1 Ответ

1 голос
/ 23 марта 2019

Два выпуска:

  • Решение должно работать для любой профессии, а не только для актера, доктора, профессии или певца. Тесты с другими данными о занятости не пройдут.
  • Первый результат не упорядочен, как было запрошено

Первый запрос:

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;  
...