代码之家  ›  专栏  ›  技术社区  ›  michael

MySQL分配给任务的人数

  •  0
  • michael  · 技术社区  · 15 年前

    我有下表…

    任务 alt text http://img260.imageshack.us/img260/3695/screenshotbg.png

    alt text http://img685.imageshack.us/img685/6445/screenshot1f.png

    塔斯克人 alt text http://img260.imageshack.us/img260/1061/screenshot2r.png

    …我想得到一份任务清单,上面列出了分配给他们的人数。请注意,一个人可以多次(在不同的日期)分配给一个任务。出于某种原因,我似乎无法应付。

    谢谢你的帮助!

    3 回复  |  直到 15 年前
        1
  •  2
  •   Tzury Bar Yochay    15 年前

    如果您希望将同一个人的多个任务计数为1,请执行以下操作:

    select tasks.task_id, tasks.title, count(distinct tasks_people.people_id) 
    as p_counter
    from tasks left join tasks_people
    on tasks.task_id = tasks_people.task_id
    group by tasks.task_id
    

    否则很简单 count()

    select tasks.task_id, tasks.title, count(tasks_people.people_id) as p_counter
    from tasks left join tasks_people
    on tasks.task_id = tasks_people.task_id
    group by tasks.task_id
    
        2
  •  0
  •   Adriaan Stander    15 年前

    我看不到您的表结构,但是您可以尝试从任务人员(distinct taskid,personid)中选择不同的值,然后计数和分组。

        3
  •  0
  •   davek    15 年前
    select task_id, count(distinct people_id) as people_assigned_to_task
    from tasks_people
    group by task_id
    

    如果计数+明显的错误行为(即花费太长时间),您可以尝试以下方法:

    select task_id, 
    (select count(*) from 
          (
              select distinct people_id from tasks_people i 
              where i.task_id = o.task_id
          ) 
    ) as people_assigned_to_task
    from tasks_people o
    group by task_id