代码之家  ›  专栏  ›  技术社区  ›  hashchen

如何查询至少2行的int值超过特定值

  •  0
  • hashchen  · 技术社区  · 5 年前

    我是mysql查询的新手: 我有两张桌子,分数和班级

    `scores`
    name  class    score
    jack  english  81
    jason english  76
    alan  english  81
    alan  math     100
    alan  physics  90
    
    `classes`
    class
    english
    math
    physics
    

    如何查询:

    1. 至少有2个不同班级的学生名字得分超过80? 上面的示例应该返回 alan 只是因为 jack jason 两者都只有一门课的成绩超过80分。

    2. 平均得分超过80分的学生名字和最低得分超过60分的学生姓名。(如果一个学生在某堂课上没有分数,则计为0,例如,在上述情况下,杰克在物理上的分数为0,所以他的数学最低分数不是75,物理最低分数是0)

    谢谢

    0 回复  |  直到 5 年前
        1
  •  1
  •   Akina    5 年前

    查询1

    SELECT name
    FROM scores
    WHERE score > 80
    GROUP BY name
    HAVING COUNT(DISTINCT class) > 1
    

    问题2

    SELECT names.name
    FROM classes
    CROSS JOIN ( SELECT DISTINCT name
                 FROM scores ) names
    LEFT JOIN scores ON classes.class = scores.class
                    AND names.name = scores.name
    GROUP BY names.name
    HAVING AVG(COALESCE(score, 0)) > 80
       AND MIN(COALESCE(score, 0)) > 60;
    

    fiddle

        2
  •  -1
  •   Muhammad bux    5 年前

    问题1:

    SELECT 名称 FROM 分数 WHERE 分数 > 80 GROUP BY 名称 HAVING COUNT( ) > 1;

    问题2:

    选择 name scores 哪里 score >60 分组BY 名称 拥有AVG( 分数 )>80;