2012-09-21 52 views
0

可能很難解釋我所追求的內容,如果問題含糊不清,我們深表歉意。MySQL如何計算每個ID的出現次數?

我有哪些產品使用關鍵字標識

所以我可能有產品ID相關聯的表,2,3,4,5與關鍵字ID相關聯14 和產品ID 3,6,9與關鍵字相關聯ID 15

我的問題是如何計算和存儲與關鍵字14相關的ID和與關鍵字15相關的ID等的總數(新增關鍵字總是增加)?

我至今SQL:

select products_keyword_categories.key_cat_name 
from products_keyword_to_product 
inner join products_keyword_categories 
on products_keyword_categories.key_cat_id = products_keyword_to_product.key_cat_id 
group by products_keyword_categories.key_cat_name 

提前任何建議非常感謝。此外,如果有任何術語可以幫助我通過谷歌搜索進一步研究,這也是非常受歡迎的。

編輯添加:在上面的示例中,包含關聯的表是products_keyword_to_product - 我內部連接另一個表以返回關鍵字名稱。

編輯添加(2):對不起,我擔心我的問題會模糊。 如果我只想使用關鍵字ID 14計算所有產品,我會使用COUNT()AS - 如答案中所述,但我還需要計算使用關鍵字ID 15和關鍵字ID 16等的產品數量。 - 希望更有意義。

+1

你可以給你的表結構與一些解釋,也許樣品DATAS?你的表名在我可憐的眼睛裏並不那麼清楚。 –

+0

假設您的products_keyword_to_product表是標準查找表,因此包含keyword_id和product_id字段,爲什麼不直接使用:'select keyword_id,count(*)作爲來自products_keyword_to_product組的num_products的keyword_id?該將給你具有特定關鍵字的產品的數量。 –

+0

products_keyword_to_product是使用該關鍵字存儲關鍵字ID和產品ID的表。因此,產品A(ID 1)使用關鍵字A(ID 14),產品B(ID 2)也使用關鍵字A(ID 14) - 希望澄清。 所使用的表名是爲了適應現有的模式,所以他們有點囉嗦,我害怕! – Andrew

回答

3
select key_cat_name ,count(*) 
from products_keyword_categories pkc 
    inner join products_keyword_to_product ptk on pkc.id=ptk.key_id 
group by id; 
0

你就要成功了,你只需要添加以下內容:

SELECT COUNT(products_keyword_to_product.id),products_keyword_categories.key_cat_name ... 剩下的就是正確的

0

更新答:

SELECT COUNT(*), reference_field FROM table WHERE... 
HAVING field=value 
GROUP BY field 

對於聚合條件,你必須使用HAVING

+0

我已更新OP,希望能夠澄清我的問題 – Andrew

+0

請閱讀我更新的問題 –

+0

感謝您的更新。我顯然需要閱讀有關使用'HAVING'的內容,因爲這對我來說是完全陌生的。再次感謝。 – Andrew

1
select cat.key_cat_name, count(*) from 
products_keyword_categories cat inner join products_keyword_to_product prod 
on prod.key_cat_id=cat.key_cat_id 
group by cat.key_cat_name 

編輯:

select cat.key_cat_name, prod_assoc.product_id, count(*) from 
products_keyword_categories cat inner join products_keyword_to_product prod_assoc 
on prod_assoc.key_cat_id=cat.key_cat_id 
group by cat.key_cat_name,prod_assoc.product_id 

假設你的表結構是這樣這個:

products_keyword_categories

key_cat_id key_cat_name 

1   Electronics 

2   Toys 

3   Software 

products_keyword_to_product

key_cat_id product_id 

1   1 

2   1 

3   2 

1   2 

產品

product_id name 

1   Product A 

2   Robot 

編輯2:

嘗試此

SELECT key_cat_name, product_id, COUNT(*) 
FROM 
(select cat.key_cat_name, prod_assoc.product_id from 
products_keyword_categories cat inner join products_keyword_to_product prod_assoc 
on prod_assoc.key_cat_id=cat.key_cat_id) as tbl 
GROUP BY key_cat_name, product_id 

編輯3:

上述查詢是由兩個部分組成:

內部部分:

(select cat.key_cat_name, prod_assoc.product_id from 
products_keyword_categories cat inner join products_keyword_to_product prod_assoc 
on prod_assoc.key_cat_id=cat.key_cat_id) 

Wh ich給每個product_id和key_cat_name的組合提供1行。

外部部分:

SELECT key_cat_name, product_id, COUNT(*) 
FROM (...) as tbl 
GROUP BY key_cat_name, product_id 

其中在內部件的結果進行操作(如TBL),計數key_cat_name和PRODUCT_ID的組合出現多少次在內部部件。

檢查:Subqueries in MySQL, Part 1

+0

嗨Nathan,添加計數(*)到SQL結果只有一行10計數,而我需要所有行顯示與總使用量(目前有10行)。 – Andrew

+0

恐怕你在這裏製作的有點超出了我目前的理解範圍。看來您正在創建和使用別名,這是我以前從未涉及的。對不起,我的無知。你可以貶低它嗎? – Andrew

+0

@安德魯,是的,我正在使用別名。我編輯了我的答案解釋這一點。此外,感謝您的新回覆,主題爲http://dev.mysql.com/tech-resources/articles/subqueries_part_1.html – Nathan