2012-02-11 39 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因爲想在一個查詢中執行該操作,而不是多個查詢和服務器端代碼。 – 2012-02-11 18:48:48

回答

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 2012-02-11 18:49:10

+0

@yshavit謝謝,'ERR 0xDEADBEEF:不完整的複製粘貼作業' – 2012-02-11 18:50:35

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 

編輯:我還沒有在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 S(你在引號寫出來)。爲了節省速度和空間,您應該使用數字數據類型,例如DECIMAL。