Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询将多个关系填充为带有条件的数组类型的字段_Mysql_Sql - Fatal编程技术网

Mysql SQL查询将多个关系填充为带有条件的数组类型的字段

Mysql SQL查询将多个关系填充为带有条件的数组类型的字段,mysql,sql,Mysql,Sql,假设我有以下表格: 学生 ID --- Name A --- Andy B --- Billy C --- Chris 得分 然后我想查询至少有1分===5分的学生,并填充他们的所有分数 在上面的例子中,我想要这个结果 [ { id: "A", name: "Andy", scores: [ { subject: "Math", score: 6

假设我有以下表格:

学生

ID --- Name
A --- Andy
B --- Billy
C --- Chris
得分

然后我想查询至少有1分===5分的学生,并填充他们的所有分数

在上面的例子中,我想要这个结果

[
  {
    id: "A",
    name: "Andy",
    scores: [
      {
         subject: "Math",
         score: 6
      },
      {
         subject: "English",
         score: 5
      }
    ]
  },
  {
    id: "B",
    name: "Billy",
    scores: [
      {
         subject: "Math",
         score: 8
      },
      {
         subject: "English",
         score: 5
      }
    ]
  }
]

我想知道ORM查询如何在原始SQL查询中从何处进行选择。我感谢您的帮助,提前谢谢。

我不知道您想要什么结果。但其思想是连接和聚合:

select s.id, s.name,
       group_concat(sc.subject, ':', score) as subject_scores
from students s join
     scores sc
     on s.id = sc.studentid
group by s.id, s.name
having sum(sc.score = 5) > 0;
或者如果5是最高分,则:

having sum(sc.score) = 5

如果您想要JSON中的结果集,那么显然您会使用JSON函数而不是字符串函数。

在CTE中使用StudentID的分区上的MAXScore。感谢您的回复,我更新了我的问题,如果条件不大于/小于运算符,查询将如何进行,我的意思是,这是我们需要执行子查询才能实现的条件。如果是这样,请在CTE中通过StudentID在分区上使用SUMScore=5。感谢您的回复,如果条件不仅仅大于运算符,那么我们如何查询它,我已经更新了我的问题,请看一看。thanks@QuocVanTangSUMsc.得分=5分;
having sum(sc.score) = 5