Mysql 多选择SQL查询

Mysql 多选择SQL查询,mysql,sql,Mysql,Sql,我的应用程序中有一个表要显示,我想显示的是一个表,其中一行的值是通过以下方式计算的: SELECT SUM (val) FROM report_orbiting_vals rov WHERE rov.orbiting_group_type_id = ? AND rov.orbiting_group_indice_id = ? SELECT (SELECT SUM(val) FROM report_orbiting_vals rov

我的应用程序中有一个表要显示,我想显示的是一个表,其中一行的值是通过以下方式计算的:

SELECT SUM (val) FROM report_orbiting_vals rov 
  WHERE rov.orbiting_group_type_id = ? AND rov.orbiting_group_indice_id = ?
SELECT 
    (SELECT
        SUM(val)
    FROM
        report_orbiting_vals rov
    WHERE
        rov.orbiting_group_type_id = 1
    AND rov.orbiting_group_indice_id = 1) as colOne,
(SELECT
        SUM(val)
    FROM
        report_orbiting_vals rov
    WHERE
        rov.orbiting_group_type_id = 1
    AND rov.orbiting_group_indice_id = 2) as colTwo,
(SELECT
        SUM(val)
    FROM
        report_orbiting_vals rov
    WHERE
        rov.orbiting_group_type_id = 1
    AND rov.orbiting_group_indice_id = 3) as colThree,
(SELECT
        SUM(val)
    FROM
        report_orbiting_vals rov
    WHERE
        rov.orbiting_group_type_id = 1
    AND rov.orbiting_group_indice_id = 4) as colFourth
对于第一行,我想显示4个值,每个值如下所示:

SELECT SUM (val) FROM report_orbiting_vals rov 
  WHERE rov.orbiting_group_type_id = (1,2,3,4) AND rov.orbiting_group_indice_id = 1
其中(1,2,3,4)是4个不同的SELECT语句,相应地具有(1,2,3,4)个值。在下一行中,我将更改
rov.orbiting_group_Indicate_id
=2,并希望使用相同的
rov.orbiting_group_type_id
值(1,2,3,4)

我是SQL的新手,我想问一下,如何用valeus表示表
所以它应该是类似于column1值、column2值、column3值、column4值的值

谢谢

更新:我想要如下内容:

SELECT SUM (val) FROM report_orbiting_vals rov 
  WHERE rov.orbiting_group_type_id = ? AND rov.orbiting_group_indice_id = ?
SELECT 
    (SELECT
        SUM(val)
    FROM
        report_orbiting_vals rov
    WHERE
        rov.orbiting_group_type_id = 1
    AND rov.orbiting_group_indice_id = 1) as colOne,
(SELECT
        SUM(val)
    FROM
        report_orbiting_vals rov
    WHERE
        rov.orbiting_group_type_id = 1
    AND rov.orbiting_group_indice_id = 2) as colTwo,
(SELECT
        SUM(val)
    FROM
        report_orbiting_vals rov
    WHERE
        rov.orbiting_group_type_id = 1
    AND rov.orbiting_group_indice_id = 3) as colThree,
(SELECT
        SUM(val)
    FROM
        report_orbiting_vals rov
    WHERE
        rov.orbiting_group_type_id = 1
    AND rov.orbiting_group_indice_id = 4) as colFourth
不幸的是,上面的代码不起作用,它产生了一个错误,但我希望您理解我现在想要什么

更新(2):

我尝试了下面提供的两种解决方案,第一种:

SELECT
(SELECT
 SUM(val)
 FROM
 report_orbitings rov
 WHERE
 rov.orbiting_group_type_id = 1
 AND rov.orbiting_group_indice_id = 1) as colOne,
(SELECT
 SUM(val)
 FROM
 report_orbitings rov
 WHERE
 rov.orbiting_group_type_id = 1
 AND rov.orbiting_group_indice_id = 2) as colTwo,
(SELECT
 SUM(val)
 FROM
 report_orbitings rov
 WHERE
 rov.orbiting_group_type_id = 1
 AND rov.orbiting_group_indice_id = 3) as colThree,
(SELECT
 SUM(val)
 FROM
 report_orbitings rov
 WHERE
 rov.orbiting_group_type_id = 1
 AND rov.orbiting_group_indice_id = 4) as colFourth
FROM report_orbitings rv
输出:

而第二:

SELECT SUM(CASE WHEN rov.orbiting_group_type_id = 1 THEN val ELSE 0 END) as type1_sum,
SUM(CASE WHEN rov.orbiting_group_type_id = 2 THEN val ELSE 0 END) as type2_sum,
SUM(CASE WHEN rov.orbiting_group_type_id = 3 THEN val ELSE 0 END) as type3_sum,
SUM(CASE WHEN rov.orbiting_group_type_id = 4 THEN val ELSE 0 END) as type4_sum
FROM report_orbitings rov
WHERE rov.orbiting_group_type_id in (1,2,3,4)
AND rov.orbiting_group_indice_id = 1
输出:


我想明确地承认,我的数据库还没有数据,只有结构。不过,我认为第二个代码可以工作,而第一个代码不能,因为它输出[Null]而不是零。为什么这两个例子有区别?它应该产生相同的输出。

不确定我是否遵循了,或者您想要它们的总和,那么您需要在()中使用

或者,您希望在不同的列中列出每一项的总和:

SELECT SUM(CASE WHEN rov.orbiting_group_type_id = 1 THEN val ELSE 0 END) as type1_sum,
       SUM(CASE WHEN rov.orbiting_group_type_id = 2 THEN val ELSE 0 END) as type2_sum,
       SUM(CASE WHEN rov.orbiting_group_type_id = 3 THEN val ELSE 0 END) as type3_sum,
       SUM(CASE WHEN rov.orbiting_group_type_id = 4 THEN val ELSE 0 END) as type4_sum
FROM report_orbiting_vals rov
WHERE rov.orbiting_group_type_id in (1,2,3,4) 
  AND rov.orbiting_group_indice_id = 1
也许你需要这个:

SELECT 
  (SELECT SUM(val) FROM report_orbiting_vals rov
   WHERE rov.orbiting_group_type_id = rv.orbiting_group_type_id
   AND rov.orbiting_group_indice_id = 1) as colOne,
  (SELECT SUM(val) FROM report_orbiting_vals rov
   WHERE rov.orbiting_group_type_id = rv.orbiting_group_type_id
   AND rov.orbiting_group_indice_id = 2) as colTwo,
  (SELECT SUM(val) FROM report_orbiting_vals rov
   WHERE rov.orbiting_group_type_id = rv.orbiting_group_type_id
   AND rov.orbiting_group_indice_id = 3) as colThree,
  (SELECT SUM(val) FROM report_orbiting_vals rov
   WHERE rov.orbiting_group_type_id = rv.orbiting_group_type_id
  AND rov.orbiting_group_indice_id = 4) as colFourth,
  rv.orbiting_group_type_id
FROM report_orbiting_vals rv

谢谢你,我没有说清楚,我想从你的问题中每个选择都是从报告中选择总和(val),其中rov.orbiting\U group\U type\U id=和rov.orbiting\U group\U INDIC\U id=1,下一个选择总和(val),从报告中选择总和(val),其中rov.orbiting\U group\U type\U id=2和rov.orbiting\U group\U INDID=1,下一个3,最后一个4。@EvgeniyKleban我的查询就是这样做的,它会在每一列中返回结果。谢谢,但是你能解释一下rov.orbiting\u group\u type\u id在(1,2,3,4)中的位置吗?当我们在查询中明确地设置这些值时,不是必须进行吗?这只是为了性能,您可以删除该部分。我用它告诉优化器只扫描
ID1,2,3,4
@Evgeniykleban您能看一下我更新的答案并告诉我,为什么您的答案与其他答案相比是有效的吗?或者这两种方法都有效?谢谢,你的asnwer是正确的,但是你能解释一下为什么我更新的代码不起作用吗?我猜它与您的解决方案相同请参见我查询中的最后一行-您更新的代码没有来自report\u orbiting\u vals的第二个
。哇,这是4个不必要的选择@sagi我们不知道数据库结构-我希望
SUM(val)
将包含多行。