使用别名优化选择子查询

米瓦特

我有一个查询,它从子查询中的同一个表中选择多个值

SELECT ...,
(
    SELECT IFNULL(SUM(pts), 0)
    FROM grades 
    WHERE s.id = student 
) AS spts,
(
    SELECT IFNULL(SUM(mat), 0)
    FROM grades 
    WHERE s.id = student
) AS smat,
(
    SELECT IFNULL(SUM(bio), 0)
    FROM grades 
    WHERE s.id = student
)AS sbio
FROM ...

它现在工作得很好,但我认为它可以优化为一个子查询而不是 3 个。

我试过的

SELECT ...,
(
    SELECT IFNULL(SUM(pts), 0) AS spts, IFNULL(SUM(mat), 0) AS smat, IFNULL(SUM(bio), 0) AS sbio
    FROM grades
    WHERE s.id = student
)
FROM ...

但我不断收到以下错误

“消息”:SQLSTATE[21000]:基数违规:1241 操作数应包含 1 列

预期产出

{
"spts": "89",
"smat": "44",
"sbio": "45"
}
戈登·利诺夫

使用 a 简化它left join

SELECT ...,
       COALESCE(spts, 0) as spts,
       COALESCE(smat, 0) as smat,
       COALESCE(sbio, 0) as sbio
FROM ... LEFT JOIN
     (SELECT student, SUM(pts) AS spts, SUM(mat) AS smat, SUM(bio) AS sbio
      FROM grades
      GROUP BY student
     ) g
     ON s.id = g.student;

根据FROM子句(以及潜在的WHERE子句)中的其他内容,这可能不会加快查询速度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在mysql子查询中使用外部别名

来自分类Dev

使用嵌套选择进行查询优化

来自分类Dev

使用几乎相同的子查询优化MySQL查询

来自分类Dev

在左联接中使用子查询时如何优化查询

来自分类Dev

使用DISTINCT优化选择查询

来自分类Dev

类型别名优化跳过Scala中的隐式转换?

来自分类Dev

优化MySQL查询,该查询使用子查询;MariaDB更快

来自分类Dev

表别名进入子查询

来自分类Dev

使用子查询定义列别名

来自分类Dev

如何使用带有子查询的join优化查询?

来自分类Dev

在两个表中使用子选择优化查询

来自分类Dev

如何在选择查询中使用案例别名

来自分类Dev

如何使用多个选择查询优化UNION mysql查询?

来自分类Dev

使用同一表上的子查询优化查询

来自分类Dev

如何使用子查询优化“ WHERE NOT IN”

来自分类Dev

如何使用索引优化选择查询

来自分类Dev

MSSQL选择查询优化

来自分类Dev

优化sql“使用ismember从查询中选择”

来自分类Dev

MySQL子查询优化

来自分类Dev

选择使用列别名的查询

来自分类Dev

MySQL优化使用WHERE子句的子查询?

来自分类Dev

在PostgreSQL的子查询的WHERE子句中使用别名

来自分类Dev

使用子查询进行查询并进行联接优化

来自分类Dev

使用子查询中的别名

来自分类Dev

使用子查询别名以防万一

来自分类Dev

如何以优化的方式在子查询中选择 COUNT

来自分类Dev

使用大型子查询优化 Django 查询

来自分类Dev

如何使用子查询的别名来获取运行总数?

来自分类Dev

优化选择不同的查询