我正在开发一个用于管理机构日常收信的应用程序。并期望记录每个字母所采取的动作。我使用了以下表格
letter_branch表
+-----------+-------------+
| branch_id | branch_name |
+-----------+-------------+
| 1 | Admin |
| 2 | Accounts |
| 3 | Engineering |
| 4 | Health |
+-----------+-------------+
letter_letter表
+-----------+-------------+--------+----------------+
| letter_id | description | branch | current_status |
+-----------+-------------+--------+----------------+
| 1 | A | 1 | Pending |
| 2 | B | 4 | Pending |
| 3 | C | 2 | Start |
| 4 | D | 4 | Pending |
| 5 | E | 3 | Start |
| 6 | F | 2 | Finish |
+-----------+-------------+--------+----------------+
letter_action_taken表
+------------------------+--------+---------------------+
| letter_action_taken_id | ref_no | action_taken_status |
+------------------------+--------+---------------------+
| 100 | 3 | 1 |
| 101 | 5 | 1 |
| 102 | 6 | 2 |
+------------------------+--------+---------------------+
letter_action_taken表的action_taken_status表示该操作正在进行中还是已完成。如果正在进行,则以1表示;如果完成,则以2表示。
然后我需要使用可用数据获得以下输出
+-------------+------------------------+-----------------------+-------------------------+--------------------------+
| branch_name | no_of_received_letters | no_of_ongoing_letters | no_of_completed_letters | no_of_non_action_letters |
+-------------+------------------------+-----------------------+-------------------------+--------------------------+
| Admin | 1 | 0 | 0 | 1 |
| Accounts | 2 | 1 | 1 | 0 |
| Engineering | 1 | 1 | 0 | 0 |
| Health | 2 | 0 | 0 | 2 |
+-------------+------------------------+-----------------------+-------------------------+--------------------------+
为此,我使用了以下查询
select
branch_name,
COUNT(pending) as pending,
COUNT(start) as start,
COUNT(finish) as finish,
COUNT(balance) as balance
FROM (
SELECT
branch_name,
CASE WHEN letter_letter.current_status = 'pending' THEN letter_letter.letter_id else 0 end as pending ,
CASE WHEN letter_letter.current_status = 'start' THEN letter_letter.letter_id else 0 end as start ,
CASE WHEN letter_action_taken.action_taken_status = '1' THEN letter_action_taken.action_taken_id else 0 end as finish ,
CASE WHEN letter_letter.status != 0 THEN letter_letter.letter_id else 0 end as balance
from letter_letter
join letter_branch on letter_branch.branch_id=letter_letter.branch
join letter_action_taken on letter_action_taken.ref_no=letter_letter.letter_id
where letter_letter.status=1
) tmp group by branch_name
但是它会产生以下输出
+-------------+------------------------+-----------------------+-------------------------+--------------------------+
| branch_name | no_of_received_letters | no_of_ongoing_letters | no_of_completed_letters | no_of_non_action_letters |
+-------------+------------------------+-----------------------+-------------------------+--------------------------+
| Admin | 1 | 1 | 1 | 1 |
| Accounts | 2 | 2 | 2 | 2 |
| Engineering | 1 | 1 | 1 | 1 |
| Health | 2 | 2 | 2 | 2 |
+-------------+------------------------+-----------------------+-------------------------+--------------------------+
我不明白我要怎么做。有人可以帮忙吗?