SQL-如何在聚合操作期间获得每个组最重复的文本值?

问题描述 投票:1回答:1

我在这里解释一下我有这两个表:

学生们

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函数,那就太好了!但没有。任何建议/解决方案将不胜感激。对不起桌面结构可能看起来有点奇怪。我试图将一个真正的问题适应这个例子。

mysql sql aggregate-functions greatest-n-per-group
1个回答
0
投票

您可以尝试以下查询。

 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;
© www.soinside.com 2019 - 2024. All rights reserved.