MySQL запрос, чтобы показать результаты выше среднего, который использует две таблицы в своей сумме - PullRequest
0 голосов
/ 20 мая 2018

Мне нужен запрос, который отображает только стоимость контракта выше среднего вместе с идентификатором контракта, и я создаю свое среднее значение с помощью этого:

SELECT AVG(average_cost)
FROM (
SELECT SUM(contracts.hours*staff.rate) AS average_cost
FROM contracts
INNER JOIN staff ON contracts.staff_id = staff.staff_id
GROUP BY contracts.contract_id
) AS inner;

Я бы хотел, чтобы результаты отображали contract_id, а также группуэтим, даже если это все, что это показывает, является contract_id для результатов выше среднего.Просто трудно получить запрос, чтобы показать результаты выше среднего с этим средним, что сложнее, чем я привык.Спасибо за помощь, спасибо.

edit * с некоторыми примерами данных, таблицы более сложны, чем эта, но я надеюсь, что это поможет с некоторым пониманием

contracts

contract_id   hours   staff_id
55            30       10
45            25       11
43            30       12
41            12       11
67            20       12   
49            20       13


staff

staff_id   rate
10         50 
11         45
12         80
13         45

Так что средняя стоимость контракта выше1344,167 или около того.Для этого примера я бы хотел, чтобы в результатах отображался contract_id для контрактов, стоимость которых выше средней.

results

contract_id   
55            
43            
67

Ответы [ 3 ]

0 голосов
/ 20 мая 2018

Вот один из методов:

SELECT c.contract_id, SUM(c.hours*s.rate) AS cost
FROM contracts c INNER JOIN
     staff s
     ON c.staff_id = s.staff_id
GROUP BY c.contract_id
HAVING cost > (SELECT AVG(average_cost)
               FROM (SELECT SUM(c.hours*s.rate) AS average_cost
                     FROM contracts c INNER JOIN
                          staff s
                          ON c.staff_id = s.staff_id
                     GROUP BY c.contract_id
                    ) sc
               );
0 голосов
/ 20 мая 2018

У меня есть пример, который может вам помочь:

SELECT first_name, last_name, invoice_amount
        FROM students 
        INNER JOIN invoices 
        ON students.id_student = invoices.id_student
        WHERE invoice_amount > (select avg(invoice_amount) from invoices)
0 голосов
/ 20 мая 2018

Насколько я понимаю с вашим вопросом, я думаю, что вы ищете это:

   select contract_id
from contracts join staff on (contracts.staff_id = staff.staff_id)
where (hours*rate) > 
(select avg(hours*rate)
from contracts join staff on (contracts.staff_id = staff.staff_id)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...