【问题标题】:mysql query to get the count of each element in a columnmysql查询以获取列中每个元素的计数
【发布时间】:2009-02-03 07:51:39
【问题描述】:

我有一个名为 category 的表,其中我有主类别 id 和名称,每个主要类别都有子类别 id 和名称。我还有一个产品表,其中包含一个类别 id 列,该列具有数字子类别 id 或2 个字母的主要类别 ID,例如:EL 代表电子产品。我的问题是如何获得顶级类别,即每个类别中的产品数量按降序排列。

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 
}

请帮忙....

【问题讨论】:

标签: sql mysql


【解决方案1】:

如果主类别 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 应该是具有适当约束的不同表。

【讨论】:

    【解决方案2】:

    似乎它应该是直截了当的,你能发布“CREATE TABLE”语句和一些示例行吗(我无法从上面的语法中“逆向工程”“CREATE TABLE”......)

    【讨论】:

      【解决方案3】:

      实际上,我认为您无法通过单个查询来做到这一点。由于表 products 中列 categoryid 的双重性质(即它可能是外键 类别名称),您必须以某种方式将该列与 @ 987654323@ 表的列 category 在连接之后,并在合并列上执行 GROUP BY,但这是不可能的,AFAIK。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-16
        • 1970-01-01
        • 2013-04-02
        • 1970-01-01
        • 2021-07-12
        • 1970-01-01
        • 2011-05-09
        相关资源
        最近更新 更多