2012-04-18 64 views
0

我無法找到這個,我敢肯定它很簡單。mysql count one value display multiple columns

表(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 
+0

有4個技術人員,196個名字,12個區域和20個管理人員。我的結果集應該是196行。 – user1084424 2012-04-18 15:02:50

+2

你的問題不是很清楚。你能給個例子嗎? – 2012-04-18 15:03:57

+0

表 技術,名稱,地區,經理 喬,約翰,賓夕法尼亞州,薩利 喬,瑪麗,喬,喬爾 – user1084424 2012-04-18 15:05:56

回答

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 
+0

是的,第一個很好,工作。現在我只需要擴展它。謝謝大家! – user1084424 2012-04-18 15:22:49

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; 

這是你想要的嗎?

+0

現在我重寫了我的查詢,我意識到我們正在說同樣的事情。 +1 – bfavaretto 2012-04-18 15:16:56

+0

@bfavaretto但我喜歡你的第一個解決方案,它看起來很整齊。 – chance 2012-04-18 15:18:28

+0

不工作,語法錯誤,不確定你想去的地方。 – user1084424 2012-04-18 15:19:06

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

不確定這是你在找什麼。 噢,看起來你真的需要使用子查詢。 感謝您的幫助。

+0

這是一種非常理智的方法來計算每個技術的任務,但奇怪的是OP似乎在尋求其他的東西。 – bfavaretto 2012-04-18 15:17:58

+0

是的,你是對的,bfavaretto。我發佈這個答案的時間,沒有例子,我誤解了它:)我已經投票了子查詢方法的另一個答案。謝謝 – 2012-04-18 15:36:36

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說這兩個表如何合併。