【问题标题】:SQL query to get the subject with the max scoreSQL查询以获取最高分的主题
【发布时间】:2020-06-30 20:39:02
【问题描述】:
name    subject classroom   Total_Score  term   session 
jane     eng     phase1      79          1      2016/2017
jane     math    phase1      56          1      2016/2017
jane     eng     phase1      98          2      2016/2017
jane     math    phase1      87          2      2016/2017
jack     eng     phase1      94          1      2016/2017
jack     math    phase1      45          1      2016/2017
jack     eng     phase1      79          2      2016/2017
jack     math    phase1      89          2      2016/2017
jane     eng     phase2      55          1      2017/2018
jane     math    phase2      37          1      2017/2018
jack     math    phase2      45          1      2017/2018
jack     eng     phase2      59          2      2017/2018

您好,我有这张表,我正在尝试让学生在学期和课程中获得最高分的科目。预期结果应该如下表所示

name   subject   classroom  max_score  term     session
jane     eng     phase1      79          1      2016/2017
jane     eng     phase1      98          2      2016/2017
jack     eng     phase1      94          1      2016/2017
jack     math    phase1      89          2      2016/2017
jane     eng     phase2      55          1      2017/2018
jack     eng     phase2      59          2      2017/2018

我尝试了以下查询

SELECT
  distinct name, subject, classroom, max(Total_Score), term, session
FROM
  ranktable
 group by name, classroom, term, session, subject
 order by term

但它不会返回所需的输出。我会很感激我能得到的任何帮助。我对 SQL 比较陌生

【问题讨论】:

  • 您使用的是 MySQL 还是 SQL Server?
  • 选择一个数据库服务器.. 任何数据库服务器
  • 我删除了冲突的数据库标签。请仅重新标记相关数据库。
  • 添加google-bigquery标签回到问题。根据我在 SO 上的长期经验 - 当用户使用 mysql、sql server 和 google-bigquery 标记问题时 - 在大多数情况下(如果不是全部)与大查询相关!
  • @MJH 我正在使用 Mysql 和 bigquery

标签: sql arrays google-bigquery subquery greatest-n-per-group


【解决方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY Total_Score DESC LIMIT 1)[OFFSET(0)] 
FROM `project.dataset.table` t
GROUP BY name, classroom, term, session

【讨论】:

  • 谢谢。这也有效。你能分享我可以了解更多关于 bigquery 的任何资源吗?
  • 考虑对您认为有帮助的答案进行投票!至于资源 - 以cloud.google.com/bigquery/docs开始
  • 感谢分享
  • 当然。 BigQuery 问题待会见 :o)
【解决方案2】:

跨数据库解决方案是使用相关子查询进行过滤:

select t.*
from mytable t
where t.total_score = (
    select max(t1.total_score)
    from mytable t1
    where 
        t1.name = t.name 
        and t1.term = t.term 
        and t1.session = t.session
)

这将为您提供每个nametermsession 得分最高的行。

【讨论】:

  • 非常感谢。
  • @wyn:我真的没有。 MySQL 文档和 Stack Overflow 是我的主要来源。
  • 好的。以后我会再来这里的:o)
猜你喜欢
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2020-08-31
  • 2013-07-31
相关资源
最近更新 更多