2011-11-22 106 views
2

表中的列包含名称。我创建了一个查询:MySQL - 计算数据库中不同数量的名称实例

SELECT COUNT(*) Number, (b_concat_name) Name FROM `js_b_table` GROUP by Name 

产生如下:

Number | Name 
1  | Chris Smith 
4  | Fred Savage 
2  | Sarah McArthur 

如何更新该行中列b_name_count包含相应的名称js_b_tableb_concat_name) ?

+0

Whhat这是否意味着:“我怎么可以动态更新的原始行,另一列,从视图中的计数”你的意思是表而不是列?什么是“原始”行?你能举一个具体的例子吗? –

+0

你可以提供表和查看创建语句吗? – melihcelik

+0

是的,这个问题真的不清楚,听起来像你要求几种不同的东西,取决于我读的是哪一句 – mattacular

回答

1

如果我理解正确的话,你想js_b_table看起来是这样的:你可以通过执行以下查询做到这一点

b_concat_name | b_name_count | ... other fields ... 
--------------+--------------+--------------------- 
fred   | 3   | ... other values ... 
fred   | 3   | ... other values ... 
fred   | 3   | ... other values ... 
barney  | 2   | ... other values ... 
barney  | 2   | ... other values ... 

,每一个记录的b_name_count表示记录的总数与相同b_concat_name。那是对的吗?

如果是这样,你可以使用这个:

UPDATE js_b_table AS jbt1 
INNER 
    JOIN (SELECT jbt2.b_concat_name, 
       COUNT(*) AS b_name_count 
      FROM js_b_table AS jbt2 
      GROUP 
      BY jbt2.b_concat_name 
     ) AS jbt3 
    ON jbt3.b_concat_name = jbt1.b_concat_name 
    SET jbt1.b_name_count = jbt3.b_name_count 
; 
+0

是的,这正是我想要完成的。不幸的是,查询产生了这个错误:#1093 - 您无法在FROM子句中指定目标表'jbt1'进行更新 – Mark

+0

@Mark:抱歉,抱歉。这是MySQL的一个令人讨厌的限制。其他DBMS更聪明。无论如何,我已经编辑了我的答案,以给出一个将在MySQL中工作的声明。对不起,没有测试它开始。 – ruakh

+0

非常酷,谢谢! – Mark

0

要获得的每个名字有多少时间是在它的表计数:

SELECT 
    count(*) AS number, 
    name 
FROM USERS 
GROUP BY name 
0

如果我理解正确的话,要更新一列,说name_count,为每个用户。

UPDATE USERS u 
SET u.name_count = 
        (SELECT count(*) 
        FROM USERS u2 
        WHERE u2.name = u.name);