Mysql统计一张表中不同属性值的数量

本文探讨了如何使用SQL语句高效地统计设备表中各设备的子级数量。首先,列举了逐条查询的方法,然后提出了通过SUM与CASE结合的解决方案,最后展示了利用GROUP BY进行聚合统计的方法。三种方法各有优劣,适用于不同的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现有一张表,此表为设备表,pid为设备的父级设备id,分别统计各设备有多少个子级设备。

第一种解决方法是一条一条输出:

select pid as id,count(*) as totalcount from project_equipments_type_grouping where pid=1;
select pid as id,count(*) as totalcount from project_equipments_type_grouping where pid=2;
select pid as id,count(*) as totalcount from project_equipments_type_grouping where pid=3;

即通过where语句分别统计不同属性的数量。

但显然这样写并不方便,能不能通过一条语句搞定了?

我又写了第二种解法:

 select
 sum(pid = 1) as 'id=1',
 sum(pid = 2) as 'id=2',
 sum(pid = 3) as 'id=3'
 from  project_equipments_type_grouping;

上面这种写法基本能满足我们的要求了,但本着闲着也是闲着的好学态度,又写了第三种解法:

 select pid as id ,count(*) as totalcount from  project_equipments_type_grouping group by pid;

上述解法仅供参考,上面的别名和分组方式只是为了方便本人结果展示。

### 创建 MySQL 的基本语法 在 MySQL 中,`CREATE TABLE` 语句用于定义新的结构。以下是 `CREATE TABLE` 的基本语法: ```sql CREATE TABLE table_name ( column1 datatype constraints, column2 datatype constraints, column3 datatype constraints, ... ); ``` 其中: - `table_name` 是要创建的新名称。 - 每列由其名称、数据类型和可选约束组成。 例如,可以按照以下方式创建一个名为 `users` 的[^1]: ```sql CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50), date_created DATE, is_admin BOOLEAN, num_points INT ); ``` 此示例中的每一列不同的字段及其属性。例如,`id` 列被设置为主键并启用了自动增长功能 (`AUTO_INCREMENT`)。 --- ### 插入数据到 MySQL 的基本语法 向已存在的中插入数据可以通过 `INSERT INTO` 语句完成。以下是通用语法: ```sql INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); ``` 如果省略括号内的列名,则需要提供与中每列相对应的值顺序。下面是一个具体的例子[^3]: ```sql INSERT INTO users (first_name, last_name, date_created, is_admin, num_points) VALUES ('John', 'Doe', '2023-10-01', TRUE, 100); ``` 上述命令会将一条记录插入到 `users` 中,指定各字段的具体值。 --- ### 存储引擎文件示形式 当创建一张新的时,MySQL 使用 `.frm` 文件来存储该的元数据信息(即格定义)。具体来说,在数据库目录下可以看到这些文件的存在[^2]。然而需要注意的是,实际的数据可能还会依赖于所使用的存储引擎而保存在其他类型的文件中。 --- ### 结合存储过程操作 除了单独执行 DDL 和 DML 命令外,还可以通过编写存储过程实现更复杂的逻辑处理。比如统计某个特定条件下账户数量的功能就可以封装成如下所示的一个简单存储过程[^4]: ```sql DELIMITER $$ CREATE DEFINER='admin'@'localhost' PROCEDURE account_count() BEGIN SELECT 'Number of accounts:' AS description, COUNT(*) AS total_accounts FROM mysql.user; END$$ DELIMITER ; ``` 调用这个存储过程即可得到当前系统用户的总数目。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值