SQL запрос, чтобы найти хотя бы одно решение - PullRequest
0 голосов
/ 19 марта 2020

У меня есть куча таблиц, скажем, Job и транзакции

Job:

id   Name
4    Clay
6    Glow
7    Circle
9    Jam

Transactions

Id   Job_id      Person     Marks
2     6           Amy        0
3     3           Keith      30
5     3           Glass       10
7     9           Know       60
11    6           Play       81
13    6           Play       100

Как найти ниже запрос возврата, который должен вернуть три столбца Job_id (Id of Job), Job_name (имя вакансии) и level, который является одной из трех возможных строк: «Hard», «Easy», «Medium».

   **Job_id**       **Job_name**      **Level**
----------------------------------------------------
       4                Clay           Hard
       6                Glow           Easy
       9                Jam            Medium

Уровень рассчитывается, если средний балл по транзакциям, - Если средний балл за работу ниже или равный 20, то его уровень «Жесткий». - Если средний балл за работу выше 20, но ниже или равен 60, то его уровень «Средний». - Если средний балл за работу выше 60, то его уровень «Легко».

Я не уверен, стоит ли мне использовать для этого подзапрос или есть более простой способ.

Спасибо!

Ответы [ 2 ]

1 голос
/ 19 марта 2020
select j.id,j.name,if(avg(t.marks)> 60,'Easy',if(avg(t.marks) <= 60 and avg(t.marks) > 20,'Medium','Hard')) as level from job j left join Transactions t on j.id= t.Job_id where t.id is not null group by Job_id

Я только что записал запрос, просмотрев ваши данные, будет хорошо, если вы предоставите схему с данными в sqlfiddle et c. Вы можете попробовать запрос выше

для использования SQLLite, как показано ниже

select j.id AS Job_id, 
   j.name AS Job_name,
CASE
WHEN avg(t.marks)>60 THEN 'EASY'
WHEN avg(t.marks)<=60 and avg(t.marks)>20 THEN 'MEDIUM'
WHEN avg(t.marks)<=20 THEN 'HARD'
END Level 
from job j 
left join Transactions  t 
on j.id = t.Job_id 
where t.id is not null
group by Job_id;
0 голосов
/ 19 марта 2020

SQLite ответ:

select j.id AS Job_id, 
       j.name AS Job_name,
CASE

WHEN avg(t.marks)>60 THEN 'EASY'
WHEN avg(t.marks)<=60 and avg(t.marks)>20 THEN 'MEDIUM'
WHEN avg(t.marks)<=20 THEN 'HARD'
END Level 
from job j 
left join Transactions  t 
on j.id = t.Job_id group by Job_id;

- Но это ошибочно, так как каким-то образом фильтр к 7-му кругу тоже идет, поэтому нужно фильтровать больше

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