2011-11-22 100 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);