多表关联查询,如何提高查询效率

yl_521 2016-09-14 09:12:12
表结构已固定,形式如下。
要求列出学校中人数最多的班级的最高分学生的信息。
三张表各个字段都需要展示。
我已经实现了这个查询,但数据量大时查询效率很低。
请教各位,这个语句该怎么写

school
id schoolname
1 实验中学a
2 实验中学b

classinfo
id classname 学生人数 schoolid
1 初一一班 54 1
2 初一二班 55 1
3 初二一班 53 1
4 初一一班 53 2
5 初一二班 46 2
6 初二一班 63 1

stuinfo
id classname score classid
1 张三 77 2
2 张士 66 1
3 李四 78 1
...全文
2507 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
AAACCCEEEFFFA 2016-09-19
  • 打赏
  • 举报
回复
那建议写2条查询 第一:获取最高分 & 班级
SELECT TOP 1 MAX(分数),COUNT(1)  FROM 学生表  GROUP BY 班级ID ORDER BY COUNT(1) DESC
第二步:在获取相关信息就ok了, 直接关联查询, 不需要做其他的特殊处理
Ltr2011 2016-09-18
  • 打赏
  • 举报
回复
;with a as (),b as () select * from a left jin b on
AAACCCEEEFFFA 2016-09-18
  • 打赏
  • 举报
回复
你写的本身就存在问题, 你要什么样的结果呢。 直接关联查询不就ok?
yl_521 2016-09-18
  • 打赏
  • 举报
回复
引用 7 楼 lylongyuan 的回复:
你写的本身就存在问题, 你要什么样的结果呢。 直接关联查询不就ok?
这个查询是可以得到要想的结果的,只不过数据量大了查询效率低
yl_521 2016-09-17
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
你的语句怎么写的呢?
引用 3 楼 ap0405140 的回复:
请问LZ的语句是什么? 请检查表与表关联的字段上是否有索引.
@唐诗三百首 @卖水果的net 楼上是我用的语句,效率是不很低? 数据量大了真是不行啊。
yl_521 2016-09-17
  • 打赏
  • 举报
回复
表结构重新更正一些错误,如下

表结构
schoolInfo
id	schoolName
1	实验中学a
2	实验中学b

classInfo
id	className	stuNum		schoolid
1	初一一班	54		1
2	初一二班	55		1
3	初二一班	53		1
4	初一一班	53		2
5	初一二班	46		2
6	初二一班	63		1

stuInfo
id	stuName		score	classid
1	张三		77	2
2	张士		66	1
3	李四		78	1
我使用的SQL语句

select a.*,b.className,b.stuNum,c.stuName,c.score 
from schoolInfo as a inner join (
	select id,className,stuNum,schoolid 
	from classinfo where 
	id in 
		(select max(stuNum) from classInfo group by schoolid)
) as b on a.id=b.shoolid
left join(
	select id,stuName,score,classid 
	from stuInfo where id in 
		(select max(score) from stuinfo group by classid)
) as c on c.classid=b.id
AcHerat 2016-09-15
  • 打赏
  • 举报
回复
先对表做统计,再关联!
唐诗三百首 2016-09-15
  • 打赏
  • 举报
回复
try this,

select a.schoolid,c.schoolname,
       a.id,a.classname
 into #schoolclass
 from classinfo a
 inner join (select schoolid,
                    学生人数=max(学生人数)
              from classinfo
              group by schoolid) b on a.schoolid=b.schoolid 
                                      and a.学生人数=b.学生人数
 inner join school c on a.schoolid=c.id

select 'stuid'=e.id,e.classname,e.score,e.classid
 into #stu
 from stuinfo e
 inner join (
select c.classid,
       score=max(score)
 from stuinfo c
 inner join #schoolclass d on c.classid=d.id
 group by c.classid) f on e.classid=f.classid
                          and e.score=f.score


select a.*, b.*
 from #schoolclass a
 inner join #stu b on a.id=b.classid
唐诗三百首 2016-09-15
  • 打赏
  • 举报
回复
请问LZ的语句是什么? 请检查表与表关联的字段上是否有索引.
卖水果的net 2016-09-14
  • 打赏
  • 举报
回复
你的语句怎么写的呢?
本课题设计了一种利用Matlab平台开发的植物叶片健康状态识别方案,重点融合了色彩与纹理双重特征以实现对叶片病害的自动化判别。该系统构建了直观的图形操作界面,便于用户提交叶片影像并快速获得分析结论。Matlab作为具备高效数值计算与数据处理能力的工具,在图像分析与模式分类领域应用广泛,本项目正是借助其功能解决农业病害监测的实际问题。 在色彩特征分析方面,叶片影像的颜色分布常与其生理状态密切相关。通常,健康的叶片呈现绿色,而出现黄化、褐变等异常色彩往往指示病害或虫害的发生。Matlab提供了一系列图像处理函数,例如可通过色彩空间转换与直方图统计来量化颜色属性。通过计算各颜色通道的统计参数(如均值、标准差及主成分等),能够提取具有判别力的色彩特征,从而为不同病害类别的区分提供依据。 纹理特征则用于描述叶片表面的微观结构与形态变化,如病斑、皱缩或裂纹等。Matlab中的灰度共生矩阵计算函数可用于提取对比度、均匀性、相关性等纹理指标。此外,局部二值模式与Gabor滤波等方法也能从多尺度刻画纹理细节,进一步增强病害识别的鲁棒性。 系统的人机交互界面基于Matlab的图形用户界面开发环境实现。用户可通过该界面上传待检图像,系统将自动执行图像预处理、特征抽取与分类判断。采用的分类模型包括支持向量机、决策树等机器学习方法,通过对已标注样本的训练,模型能够依据新图像的特征向量预测其所属的病害类别。 此类课题设计有助于深化对Matlab编程、图像处理技术与模式识别原理的理解。通过完整实现从特征提取到分类决策的流程,学生能够将理论知识与实际应用相结合,提升解决复杂工程问题的能力。总体而言,该叶片病害检测系统涵盖了图像分析、特征融合、分类算法及界面开发等多个技术环节,为学习与掌握基于Matlab的智能检测技术提供了综合性实践案例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!

22,298

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧