Mysql中根据子表的分组后的最大统计数获取主表中的信息

本文介绍了一个复杂的SQL查询案例,旨在获取发帖数量最多的学生的所有信息。通过对帖子表进行分组并计算每个学生的发帖数量,找出最多的发帖数对应的学生ID,最后利用此ID查询学生表获取详细信息。

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

  • 连接mysql :mysql -h主机地址 -u用户名 -p密码
  • 修改密码 :mysqladmin  -u用户名 -p旧密码 password 新密码


  • 显示当前的数据库 :select database();

  • 显示数据库版本 :select version();

  • 获取当前时间: select now();


         ...................还有简单的数据库操作不做例举


下面尝试一些数据库中相对比较复杂的查询语句。

案例1:我想获取某一个学生的全部信息,该学生的发帖数量最多。学生与帖子是俩个表,帖子关联学生的主键stu_id;

俩张表中的内容如下:

mysql> select pp_id,pp_title,stu_id from tb_postpage;
+-------+-----------+--------+
| pp_id | pp_title  | stu_id |
+-------+-----------+--------+
|     1 | sdfasf    |      1 |
|     2 | 一起啊    |      1 |
|     3 | sfsdg     |      1 |
|     4 | jiayia    |      2 |
|     6 | dasfasf   |      2 |
|     7 | fasdfasdf |      3 |
|     8 |           |      3 |
+-------+-----------+--------+
7 rows in set

mysql> select stu_id,stu_count,stu_password from tb_student;
+--------+-----------+--------------+
| stu_id | stu_count | stu_password |
+--------+-----------+--------------+
|      1 | 123456    | 123456       |
|      2 | 140950105 | 051315       |
|      3 | 13145     | pangjiafnei  |
+--------+-----------+--------------+

1.先要对tb_postpage做一个分组。

  select * from tb_postpage group by stu_id;

   select pp_id,pp_title,stu_id from tb_postpage group by stu_id;
+-------+-----------+--------+
| pp_id | pp_title  | stu_id |
+-------+-----------+--------+
|     1 | sdfasf    |      1 |
|     4 | jiayia    |      2 |
|     7 | fasdfasdf |      3 |
+-------+-----------+--------+
3 rows in set

2.获得每组分组之后的计数以及stu_id

mysql> select stu_id,count(*) as count from tb_postpage group by stu_id;
+--------+-------+
| stu_id | count |
+--------+-------+
|      1 |     3 |
|      2 |     2 |
|      3 |     2 |
+--------+-------+
3 rows in set

3.获取count中的最大值

mysql> select stu_id,max(count) from (select stu_id,count(*) as count from tb_postpage group by stu_id) aa;
+--------+------------+
| stu_id | max(count) |
+--------+------------+
|      1 |          3 |
+--------+------------+
1 row in set【注意,这里要为表起一个别名

4.获取该表中的stu_id;

mysql> select stu_id from (select stu_id,max(count) from (select stu_id,count(*) as count from tb_postpage group by stu_id) aa) bb;
+--------+
| stu_id |
+--------+
|      1 |
+--------+
1 row in set


5.通过该id获取学生的全部信息

mysql> select stu_id,stu_count,stu_password from tb_student where stu_id = (select stu_id from (select stu_id,max(count) from (select stu_id,count(*) as count from tb_postpage group by stu_id) aa) bb);
+--------+-----------+--------------+
| stu_id | stu_count | stu_password |
+--------+-----------+--------------+
|      1 | 123456    | 123456       |
+--------+-----------+--------------+
1 row in set

在数据库中,如果你想要统计某个数据库中的表的数量,通常需要询系统信息表或者元数据表。这取决于你使用的数据库管理系统(DBMS),因为每个系统都有它自己的方式存储和访问这些信息。以下是针对几种常见数据库系统的SQL示例: 1. **MySQL**: 可以通过`INFORMATION_SCHEMA.TABLES`系统视图来获取信息,例如: ```sql SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_database_name'; ``` 2. **PostgreSQL**: 使用`pg_catalog.pg_tables`视图: ```sql SELECT COUNT(*) FROM pg_catalog.pg_tables WHERE schemaname = 'public' AND tablename !~ '^_'; ``` `public`可以替换为你想看的实际模式名。 3. **SQL Server**: 使用`sys.objects`系统视图: ```sql SELECT COUNT(*) FROM sys.objects WHERE type = 'U'; -- U代表用户表 ``` 4. **Oracle**: 可能需要动态询,比如: ```sql SELECT COUNT(*) FROM ALL_TABLES WHERE OWNER = 'your_owner'; ``` 其中`OWNER`是数据库用户名。 5. **MongoDB** (文档数据库):不支持直接计数,因为表的概念不像关系型数据库那样明确,但你可以通过聚合来估算文档数: ```javascript db.getCollectionNames().length; ``` 请将上述SQL中的`'your_database_name'`, `'your_owner'`等替换为实际的数据库名称或用户。执行这些询后,你会得到对应的表的数量。如果你想获得更详细的统计,如按特定类别(如表类型、创建日期等)分组的结果,可能需要稍微调整询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值