Mysql 计数连接表 OneToMany

标签 mysql sql join left-join

任务:

id | title   | description | 
---------------------------------------------------------------------
 1 | Task1   | Descr1      | 
 2 | Task2   | Descr1      | 
 3 | Task2   | Descr1      | 
 4 | Task2   | Descr1      | 
 5 | Task2   | Descr1      | 

消息:

id | task_id | message   | status |
---------------------------------------------------------------------
 1 | 1       | Message1  | HOLD
 2 | 1       | Message2  | OK
 3 | 1       | Message3  | ERROR
 4 | 1       | Message4  | ERROR
 5 | 2       | Message5  | HOLD
 6 | 2       | Message6  | OK
 7 | 2       | Message7  | OK
 8 | 2       | Message7  | OK
 9 | 3       | Message7  | OK

我想显示如下:

id | title   | description | count(HOLD) | count(OK) | count(ERROR)
---------------------------------------------------------------------
 1 | Task1   | Descr1      | 1           | 1         | 2
 2 | Task2   | Descr1      | 1           | 3         | 0
 3 | Task2   | Descr1      | 0           | 1         | 0
 4 | Task2   | Descr1      | 0           | 0         | 0
 5 | Task2   | Descr1      | 0           | 0         | 0

最佳答案

时,您可以对 sum 和 CASE 使用选择性聚合
  select  task.id
    , task.title  
    , task.description
    , sum(case when Message.status = 1 then 1 else 0 end )  status1
    , sum(case when Message.status = 2  then 1 else 0 end )  status2
    , sum(case when Message.status = 3  then 1 else 0 end )  status3
from Task
INNER JOIN Message ON Task.id = Message.task_id
group by task.id
    , task.title  
    , task.description

关于Mysql 计数连接表 OneToMany,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49585618/

相关文章:

mysql - 将 SQL 查询转换为 Hibernate 查询

ruby-on-rails - rails HABTM : Select everything a that a record 'has'

mysql - 如何更新特定 ID 号的多个值

php - Codeigniter:一张表中的多个 COUNT 和 SUM

php - Drupal 6 查询多个表

sql - 如何编写更新查询以使用 SQL 数据源更新两个表?

java - 如何在 JDBI sql api 中打印 @SqlQuery 注释

MYSQL:如何从姓氏中找到player_id?

mysql - 对列运行 SUBSTRING_INDEX 查询

mysql - 如果日期相同,则从具有最大日期和最大 ID 的表中选择 ID