2017-09-15 12 views
1

二つのテーブル(mysqlの)から合計数量は:は選択して、私はこのような何かを合計したい

id |progress [%] | 
    1 |100   | 
    2 |5    | 
    3 |5    | 
    4 |100   | 
    5 |10   | 

セカンドテーブルがPROJECT_IDが同じ数字IDを持つタスクを示しています 私の最初のテーブルには、プロジェクトのみを表示します最初のテーブル(ID = PROJECT_ID):

Project_id |status  | 
    1   |done  | 
    2   |done  | 
    3   |undone  | 
    4   |in_progress| 
    5   |done  | 

だから、これら2つのテーブルを結合し、1つの行結果を取得したい:

| done | undone | in_progress | 
| 2  | 1  | 0   | 

私はすべてのタスク(2番目のテーブル)をステータスで合計したいが、100%進捗状況のプロジェクト(最初のテーブル)内のタスクは除いている。

+0

グーグル –

答えて

1

SUMCASEを使用してください。

SELECT SUM(CASE WHEN status = 'done' THEN 1 ELSE 0 END) done, 
SUM(CASE WHEN status = 'undone' THEN 1 ELSE 0 END) undone, 
SUM(CASE WHEN status = 'in_progress' THEN 1 ELSE 0 END) in_progress 
FROM yourtablea a 
INNER JOIN yourtableb b ON a.id = b.Project_id 
WHERE progress != '100' 

出力

done undone in_progress 
2 1  0 

SQLフィドル: 'ピボット' についてhttp://sqlfiddle.com/#!9/6b936/2/0

0
select SUM(if(a.status ="done", 1,0)) as `Done`, SUM(if(a.status ="undone", 1,0)) as `UnDone`, SUM(if(a.status ="in_progress", 1,0)) as `UnDone` from Status_table a join Progress_table b on a.Project_id = b.id WHERE b.progress != '100'; 
関連する問題