2012-02-11 10 views
2

私は2つのテーブル:jobs &アクティビティを持っています。 ジョブは0個以上のアクティビティで構成されます。MySQL Join Query Construction

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' 

は、どのように私は、次のフィールドを取得するためにクエリを記述します:MySQLのとして評価

DESIRED OUTPUT FIELDS: 

job_id, client_name, job_cost, total_cost_of_activities, number_of_activities 

任意の助けが私の長所の一つではありません!

+1

+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:不完全なコピー・ペースト・ジョブ' –

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などの数値データ型を使用する必要があります。