我在这里解释一下我有这两个表:
学生们
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
MEDICAL_TESTS
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
如果上面的代码片段中有一个MOST_FREQ函数,那就太好了!但没有。任何建议/解决方案将不胜感激。对不起桌面结构可能看起来有点奇怪。我试图将一个真正的问题适应这个例子。
您可以尝试以下查询。
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;