MYSQL 怎样根据一个字段的MAX值返回符合该条件的另一个字段的值?

nichtmich 2009-03-21 10:33:14
不知道表述清楚了没有
我已经生成了这样一个表"TABLE1":
对应组字数 a_声调 b_声调 古调数 gd 字数
入 1
578 上声 上声 4 平 6
578 上声 上声 4 去 6
578 上声 上声 4 入 1
578 上声 上声 4 上 565
7 上声 阳平 3 平 2
7 上声 阳平 3 去 2
7 上声 阳平 3 上 3
37 上声 阳去 1 上 37
3 上声 阳上 1 上 3
9 上声 阴平 2 平 3
9 上声 阴平 2 上 6
18 上声 阴去 3 平 1
18 上声 阴去 3 去 2
18 上声 阴去 3 上 15
15 阳平 上声 2 平 12
15 阳平 上声 2 上 3
917 阳平 阳平 3 平 904
917 阳平 阳平 3 去 11
917 阳平 阳平 3 上 2
14 阳平 阳去 2 平 9
14 阳平 阳去 2 去 5
1 阳平 阳上 1 上 1
22 阳平 阴平 2 平 21
22 阳平 阴平 2 上 1
1 阳平 阴去 1 平 1
……
现在我想要做的是根据【a_声调】分组,返回一组中【对应组字数】的最大值,到这儿都好写,但接下来我还要得到这个最大值对应的【b_声调】和[gd];然后还要找到符合以上条件条目中【字数】的最大值。
例如:上表可以分为【上声】和【阳平】等组,在“上声”组中【对应组字数】的最大值是578,符合这个条件的是上表中1-4项(【b_声调】上声,[gd]平、去、入上),这4项中【字数】最大的是第四项(578 上声 上声 4 上 565)
这个表是连接产生的,按【a_声调】分组【对应组字数】最大的项,【b_声调】只会有一个值。
能够用MY SQL 实现这个任务吗? 是否需要用到之前的表(一个表包括【对应组字数】、【a_声调】、【b_声调】、【古调数】,另一个表包括【字数】、【a_声调】、【b_声调】、[gd],然后我做了个连接)?
...全文
526 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
nichtmich 2009-03-21
  • 打赏
  • 举报
回复
啊~不好意思~是我前面的表重新生成时错了……
ACMAIN_CHM 2009-03-21
  • 打赏
  • 举报
回复
select *
from 声调对应的中古条件 a
where not exists (select a_声调 from 声调对应的中古条件 where a_声调=a.a_声调 and b_声调=a.b_声调 and 古调数=a.古调数 and 对应组字数>a.对应组字数);
nichtmich 2009-03-21
  • 打赏
  • 举报
回复
谢谢~ 两个查询语句都能运行,不过都会查询出不要的结果。
比如:对于a_声调为“上声”的这组来说,第一步应该返回以下项目

对应组字数 a_声调 b_声调 古调数 gd 字数
入 1
578 上声 上声 4 平 6
578 上声 上声 4 去 6
578 上声 上声 4 入 1
578 上声 上声 4 上 565
……

但是,运行这两个查询语句得到的结果是
对应组字数 a_声调 b_声调 古调数 gd 字数
578 上声 上声 4 平 6
578 上声 上声 4 去 6
578 上声 上声 4 入 1
578 上声 上声 4 上 565
578 上声 上声 4 平 12
578 上声 上声 4 上 3
578 上声 上声 4 去 11
578 上声 上声 4 上 24
578 上声 上声 4 平 3
578 上声 上声 4 上 4
578 上声 上声 4 平 1
578 上声 上声 4 去 2
578 上声 上声 4 上 13


加粗的这些都是内连接造成的错误结果,原表里没有这些项
nichtmich 2009-03-21
  • 打赏
  • 举报
回复
我在ACCESS里写MYSQL做查询……
ACMAIN_CHM 2009-03-21
  • 打赏
  • 举报
回复
select b.*
from 声调对应的中古条件 b inner join (
SELECT MAX(对应组字数) as m对应组字数,a_声调
FROM 声调对应的中古条件
GROUP BY a_声调
) a on b.a_声调=a.a_声调 and b.对应组字数=a.m对应组字数
ACMAIN_CHM 2009-03-21
  • 打赏
  • 举报
回复
select *
from 声调对应的中古条件 a
where not exists (select a_声调 from 声调对应的中古条件 where a_声调=a.a_声调 and 对应组字数>a.对应组字数);


另外你这倒底是ACCESS还是mySQL ? mySQL的标题在Access的板块中?

QQ群 48866293 / 12035577 / 7440532 / 13666209
ACCESS专业论坛
http://www.accessbbs.cn/bbs/index.php .
http://www.office-cn.net/vvb/ .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
.
http://www.office-cn.net/home/space.php?uid=141646 .
nichtmich 2009-03-21
  • 打赏
  • 举报
回复
简单地说,我就是要做这样一件事:

按【a_声调】分组后,先求每组【对应组字数】为组内最大值的项,再在这些项里求【字数】为最大值的项,返回所有符合以上条件的项。
nichtmich 2009-03-21
  • 打赏
  • 举报
回复
而且,如果我直接用 Max(a.对应组字数)再到原表里去搜,数字巧合就会搜到其他组去……
nichtmich 2009-03-21
  • 打赏
  • 举报
回复
如何“再在此集上进行条件查询”呢?

事实上我只会写这一步:
SELECT MAX(a.对应组字数),a.a_声调
FROM 声调对应的中古条件 AS a
GROUP BY a.a_声调;
但是,这样就丢失了b_声调的信息了。
wowowohahaha 2009-03-21
  • 打赏
  • 举报
回复
当然可以了,只要按"【a_声调】分组,返回一组中【对应组字数】的最大值"得到一个集,再在此集上进行条件查询就不难了吧,如果这不是一张表,何不做个视图试试

7,714

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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