2012-02-11 6 views
2

У меня есть две таблицы: вакансии & деятельности. Задача состоит из нуля или более операций.MySQL Присоединиться к строительству запросов

JOBS (id,client_name,job_cost): 

1, 'Kelly, Peter', '139.00' 


ACTIVITIES (id,job_id,activity_name,activity_cost): 

1, 1, 'Activity A', '40.00' 

2, 1, 'Activity B', '59.00' 

3, 1, 'Activity C', '40.00' 

Как написать запрос, чтобы получить следующие поля:

DESIRED OUTPUT FIELDS: 

job_id, client_name, job_cost, total_cost_of_activities, number_of_activities 

Любая помощь оценена как MySQL не одна из моих сильных сторон!

+1

+1 для желающих сделать это в одном запросе вместо нескольких запросов и кода на стороне сервера. –

ответ

2
SELECT 
    JOBS.*, 
    SUM(ACTIVITIES.activity_cost) AS total_cost_of_activities, 
    COUNT(ACTIVITIES.id) AS number_of_activities 
FROM 
    JOBS 
    INNER JOIN ACTIVITIES on ACTIVITIES.job_id=JOBS.id 
GROUP BY JOBS.id 
+0

Я думаю, что вам понадобится 'GROUP BY' слишком – yshavit

+0

@yshavit Спасибо,' ERR 0xDEADBEEF: неполное копирование-вставка job' –

1
SELECT jobs.id, jobs.client_name, jobs.job_cost, 
COUNT(Activities.*) AS number_of_activities, SUM(activity_cost) as total_cost_of_activities 
FROM Jobs INNER JOIN Activities 
ON Activities.job_id = jobs.id 
GROUP BY jobs.id, jobs.client_name, jobs.job_cost 

EDIT: Я не работал на MySQL. Я предполагаю, что базовый синтаксис SQL остается таким же с MySQL.

3
SELECT j.id, j.client_name, j.job_cost, 
COUNT(a.id) AS number_of_activities, SUM(activity_cost) as total_cost_of_activities 
FROM Jobs AS j 
INNER JOIN Activities AS a ON j.id = a.job_id 
GROUP BY j.id, j.client_name, j.job_cost 

Пожалуйста, обратите внимание: числовые типы не должны быть сохранены как VARCHAR с (вы написали их в кавычках). Для экономии скорости и пространства вы должны использовать числовой тип данных, например DECIMAL.

Смежные вопросы