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

Posted

技术标签:

【中文标题】mysql查询以获取列中每个元素的计数【英文标题】:mysql query to get the count of each element in a column 【发布时间】: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 

请帮忙....

【问题讨论】:

我在这里看到了完全相同的问题(但来自不同的 id):***.com/questions/506471/… 【参考方案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 查询(一个用于直接计算主要类别中的产品,另一个用于计算子类别中的产品),并将它们的结果与一些服务器端脚本结合起来。

【讨论】:

以上是关于mysql查询以获取列中每个元素的计数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用MySQL查询某个列中相同值的数量统计

计数值出现在 MySQL 中特定列中的次数

MYSQL列中的数据以逗号隔开,如何查询?

如何获取列中每个不同值的计数? [复制]

MySQL 查询以获取 post_id 和特征图像 URL

MYSQL查一个字段中 多个值