ПРИСОЕДИНЯЙТЕСЬ, GROUP BY, COUNT И CASE в одном запросе - PullRequest
1 голос
/ 19 июня 2019

У меня есть две таблицы: 1) Имя идентификатора планеты from_sun moons_number // целое число planet_class 2) Имя идентификатора луны planet_id // равно id планеты из предыдущей таблицы is_major

Задача:

Извлеките следующие данные: 1) название планеты, 2) количество лун планеты согласно таблице лун, 3) количество лун планеты согласно таблице планет, 4) столбецименованное сравнение со значениями '+' или '-' (результат сравнения значений в столбцах в 2 и 3, '+', если они равны, и '-', если они различаются).

Порядокрезультат определяется результатом сравнения, а затем именем планеты.Примечание: включите планеты без лун.

Это моя попытка сделать это:

SELECT p.name AS planet
      ,COUNT(m.id) AS m1
      ,p.moons_number AS m2 
      ,CASE WHEN m1=m2 THEN '+'ELSE '-' END AS comparison 
FROM planets AS p
LEFT JOIN moons AS m 
ON p.id=m.planet_id
GROUP BY planet
ORDER BY comparison, planet

Я пробовал много раз, но он отказывается работать Local ELITE, я стою на коленяхвниз и попросить вашей помощи!СЧИТАЮ НА ВАС ^^

1 Ответ

1 голос
/ 19 июня 2019

Я думаю, что этот запрос может работать.

SELECT 
  p.name AS planet, 
  COUNT(m.id) AS m1, 
  max(p.moons_number) AS m2, 
  CASE WHEN COUNT(m.id)=max(p.moons_number) THEN '+' ELSE '-' END AS comparison 
FROM planets AS p 
  LEFT JOIN moons AS m 
    ON p.id=m.planet_id 
GROUP BY p.name
ORDER BY 4,1; 

Поскольку планета должна иметь только одно значение для moons_number, вы можете просто сделать max, чтобы получить это значение, а затем group by planetбудет действительным.Для case when вы можете сравнить эти 2 значения с этим небольшим изменением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...