mysql计数一个值显示多个列

时间:2012-04-18 15:01:48

标签: mysql

我无法找到它,我确信它很简单。

表(196行)

tech, name, area, manager
------------------------------
Joe,mary,pa,sally
Kim,brad,ga,tim
kelly,Joe,pa,sally
Joe,jose,pa,sally

将技术分配给多个名称/区域/经理。我想做一个报告,显示表格的所有行,其中一列显示技术的分配数量。

我想要的结果

tech, name, area, manager, (count of number of tech assignments)
Joe,mary,pa,sally,2
Kim,brad,ga,tim,1
kelly,Joe,pa,sally,1
Joe,jose,pa,sally,2

4 个答案:

答案 0 :(得分:3)

我猜你想要SELECT子句上的子查询:

SELECT 
   name, 
   area, 
   manager, 
   (SELECT COUNT(*) FROM tablename WHERE tech = x.tech) AS assignments
FROM tablename x

这是一种可能更有效的方法来做同样的事情:

SELECT 
   t.name, 
   t.area, 
   t.manager,
    sub.assignments 
FROM tablename t
INNER JOIN (
    SELECT tech, COUNT(*) AS assignments 
    FROM tablename 
    GROUP BY tech
 ) sub
ON sub.tech = t.tech

答案 1 :(得分:1)

select 
    a.tech, a.name, a.area, a.manager,
    b.cnt
from table a, (
    select count(*) cnt, tech
    from table
    group by tech) b
where a.tech=b.tech;

这是你想要的吗?

答案 2 :(得分:0)

SELECT tech, count(name) AS total_records FROM db_table GROUP BY tech

不确定这是你正在寻找的东西。 哦,是的,看起来你真的需要使用子查询。 感谢有帮助的例子。

答案 3 :(得分:0)

SELECT tech, name, area, manager, assignments  
FROM table
  INNER JOIN ( 
    SELECT tech, COUNT(*) AS assignments  
    FROM table  
    GROUP BY tech 
  ) t 
USING (tech)

<强> 说明:

从表中选择所有列,并将它们与包含技术列的表和具有特定技术的表中的行数连接起来。关键字USING说这两个表是如何合并的。