SQL-如何在聚合操作期间获取每组重复次数最多的文本值?
Posted
技术标签:
【中文标题】SQL-如何在聚合操作期间获取每组重复次数最多的文本值?【英文标题】:SQL- How to get the most repeated text value per group during an aggregate operation? 【发布时间】:2019-07-21 23:20:36 【问题描述】:我在这里解释一下。我有这两张桌子:
学生
Student_ID HighSchool
ST_001 East High
ST_002 East High
ST_003 East High
ST_004 East High
ST_005 San Marino
ST_006 San Marino
ST_007 Tall Oaks
ST_008 Tall Oaks
医学测试
TestKit_ID Student_ID Class Urine_results Body_type
MedTest001 ST_001 English 0.8 I
MedTest002 ST_001 English 0.6 II
MedTest003 ST_003 English 0.8 II
MedTest004 ST_005 Math 0.6 IV
MedTest005 ST_005 Math 1.0 IV
MedTest006 ST_005 Math 1.4 III
MedTest007 ST_006 English 0.5 II
MedTest008 ST_006 English 0.6 III
我需要一个汇总表来指定所有班级,每个班级学生的医疗/身体结果的两个汇总列(AVG_urineRes 和 MOST_FREQ_BodyType),以及提供此类班级的学校。 请参阅下面的示例查询结果表:
HighSchool Class AVG_UrineRes Body_type (most frequent per class)
East High English 0.6 II
San Marino Math 1.0 IV
San Marino English 0.55 III
但是,如何获取最频繁的 body_type 聚合列?此时我的脚本如下所示:
Select s.highShool, m.class, AVG(m.urine_results), MOST_FREQ(m.body_type)
FROM Student s INNER JOIN MedicalTest m ON (s.Student_ID = m.Student_ID)
GROUP BY s.highShool, m.class
如果有像上面我的 sn-p 那样的 MOST_FREQ 函数,那就太好了!但没有。任何建议/解决方案将不胜感激。抱歉,表格结构可能看起来有点奇怪。我试图将一个真正的问题应用到这个例子中。
【问题讨论】:
关注greatest-n-per-group 以获得类似答案。非 html 表格也更容易阅读。 是什么让您决定为圣马力诺/英语选择 III 型? II 型也经常发生。此处是否适用某些规则,或者您是在任意选择一个值? 您使用的是哪个 mysql 版本? 索斯滕。是的,随意。我其实是在用access,不过我上周刚下载了MYSQL,所以最新版MySQL中的解决方案也可以。谢谢。 【参考方案1】:您可以尝试如下查询。
SELECT S.highschool,
MT.class,
Avg(urine_result),
(SELECT body_type
FROM medical_tests M
INNER JOIN students S1
ON M.student_id = S1.student_id
WHERE M.class = MT.class
AND S1.highschool = S.highschool
GROUP BY M.body_type
ORDER BY Count(*) desc
LIMIT 1)MOST_FREQ
FROM students S
INNER JOIN medical_tests MT
ON MT.student_id = S.student_id
GROUP BY S.highschool,
MT.class;
【讨论】:
以上是关于SQL-如何在聚合操作期间获取每组重复次数最多的文本值?的主要内容,如果未能解决你的问题,请参考以下文章