mysql查询获取列中每个元素的计数

时间:2009-02-03 07:51:39

标签: sql mysql

我有一个名为category的表,其中我有主类别ID和名称,每个主类别都有子类别ID和名称。我还有一个带有类别id列的产品表,该列具有数字子类别ID或者2个字母的主要类别ID例如:EL for electronics ..我的问题是如何获得最高类别,即。,每个类别中的产品数量按降序排列。

category
{
sub_cat_id - numeric
sub_cat_name - varchar
main_cat_id - varchar (2 characters)
main_cat_name
}
products
{
categoryid,//this can be either main_cat_id or sub_cat_id 
}

请帮助......

3 个答案:

答案 0 :(得分:0)

看起来它应该是直截了当的,你可以发布“CREATE TABLE”语句和一些示例行(我无法从上面的语法中“反向工程”“CREATE TABLE”...)

答案 1 :(得分:0)

实际上,我认为你不能用一个查询来做到这一点。由于表categoryid中列products的双重性质(即它可能是外键类别名称),您必须以某种方式将其组合在一起在联接之后使用表main_cat_id的{​​{1}}列的列,并在合并列上执行category,但这是不可能的,AFAIK。

当然,您可以执行两个单独的SQL查询(一个用于直接在主要类别中计算产品,另一个用于计算子类别中的产品),并将其结果与一些服务器端脚本组合。

答案 2 :(得分:0)

如果主类别ID和子类别ID之间没有命名空间冲突,您可以:

select main_cat_id , count(*) as total
from category
where ( main_cat_id in (select categoryid from products) 
                       OR 
       sub_cat_id in (select categoryid from products)
       )
group by main_cat_id 
order by total desc
然而,表面上似乎存在类别表设计的问题。 sub_cat应该是具有适当约束的不同表。