MySQL如何计算每个ID的出现次数?

时间:2012-09-21 12:51:08

标签: mysql sql

可能很难解释我的意思,如果问题含糊不清,请道歉。

我有一个表格,可以使用ID

将产品与关键字相关联

所以我可能有与关键字ID 14相关联的产品ID 2,3,4,5 和与关键字ID 15相关联的产品ID 3,6,9

我的问题是如何统计和存储与关键字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等计算产品数量。 - 希望这样做更有意义。

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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)

每个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

答案 2 :(得分:0)

你几乎就在那里,你只需要添加以下内容:

select count(products_keyword_to_product.id),products_keyword_categories.key_cat_name ... 其余的都是正确的

答案 3 :(得分:0)

更新的答案:

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

对于汇总条件,您必须使用HAVING