表中具有相同值的其他行的计数

时间:2014-03-13 21:35:33

标签: mysql sql

所以我对mySQL有点新意,可以弄清楚如何做到这一点。我有一张桌子,上面有工人的栏目,他们工作的建筑物以及他们工作的办公室。

我尝试进行查询,返回此表格,并附上一栏,说明有多少人在同一个房间工作。所以在这个例子中Paul和Tim都在xxx1中工作,所以专栏会说2,但对于John来说它会说1并且他是那个房间里唯一的人。

| worker | office building   | room number     |
------------------------------------------------
| john   | xxx               | 0               | 
| paul   | xxx               | 1               |
| tim    | xxx               | 1               |
| Dave   | yyy               | 0               |    
| Ty     | yyy               | 1               |    
| Luke   | yyy               | 1               |

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT t1.*,
  (SELECT COUNT(1)
  FROM mytable t2
  WHERE t2.`room number` = t1.`room number`
  )
FROM mytable t1

我建议您不要使用带有空格的字段名称,而使用下划线代替空格。

答案 1 :(得分:1)

这些问题通过分析函数解决。

所以在这里看一下分析函数。

这里你需要的是使用count(*)over,如下所示;

select  t.*, count(1) OVER (PARTITION BY office_building, room_number) from t

修改

很抱歉,刚刚注意到您正在使用MYSQL,似乎没有可用于MYSQL的分析函数

所以试试这个;

   select t.*, wcounts.worker_count 
   from t,
   (select office_building, room_number count(1) as worker_count
      from t
     group by office_building, room_number) wcounts
   where t.office_building = wcounts.office_building
   and t.room_number = wcounts.room_number