【问题标题】:Select two variables from in a single MYSQL request从单个 MYSQL 请求中选择两个变量
【发布时间】:2020-09-28 14:59:59
【问题描述】:

我正在尝试根据变量的值从同一个 MySQL 请求中提取两个变量。我可以在两个单独的查询中提取这些变量,但我确信必须可以将它们组合起来以在单个语句中生成两个 / 列数据,也许可以使用 if 语句?

我有一个 JOIN 语句,这有点让我有点吃惊。

第一个请求:

SELECT variables.value as "Mean Power"
FROM variables
INNER JOIN stat_types ON variables.id=stat_types.id
WHERE stat_types.name="Mean";

第二个请求:

SELECT variables.value as "Maximum Power"
FROM variables
INNER JOIN stat_types ON variables.id=stat_types.id
WHERE stat_types.name="Max";

唯一改变的是 stat_type 名称从 Max 更改为 Mean,我想相应地更改输出列名称。

这两个请求的结果数量总是相同的。 您能提供的任何帮助都会很棒!

编辑: 我应该明确表示我是在两个时间序列之后,而不是单个最大值。我现在最接近的是使用下面建议的代码,稍微编辑如下:

SELECT
    v.id,
    (CASE WHEN st.name = 'Mean' THEN v.value END) AS `Mean Power`,
    (CASE WHEN st.name = 'Max'  THEN v.value END) AS `Maximum Power`
FROM variables v
INNER JOIN stat_types st
    ON v.id = st.id
WHERE
    st.name = IN ('Mean', 'Max')

这给出了:

|id|Mean Power| Maximum Power|
|1 |NULL      |9010          |
|1 |NULL      |8999          |
|1 |NULL      |9011          |
|2 |9053      |NULL          |
|2 |9040      |NULL          |
|2 |9045      |NULL          |

太好了。但是,我想要这个:

|Mean Power| Maximum Power|
|9053      |9010          |
|9040      |8999          |
|9045      |9011          |

所以我需要结合功率值,我不需要 id 作为输出。对于每个值,我还有一个时间步长,如有必要可以使用。每个时间步都有一个最大值和平均值(相同数量的值) 谢谢!

【问题讨论】:

    标签: mysql sql select


    【解决方案1】:

    您也许可以在这里使用条件聚合:

    SELECT
        v.id,
        MAX(CASE WHEN st.name = 'Mean' THEN v.value END) AS `Mean Power`,
        MAX(CASE WHEN st.name = 'Max'  THEN v.value END) AS `Maximum Power`
    FROM variables v
    INNER JOIN stat_types st
        ON v.id = st.id
    WHERE
        st.name = IN ('Mean', 'Max')
    GROUP BY
        v.id;
    

    【讨论】:

    • 非常感谢您的评论。我试过实现这个,但我有一个问题:我不想要一个最大值,而是整个时间序列 - 所以我删除了 MAX 命令。出于同样的原因,我还删除了 GROUP BY 命令。这样做会产生 3 列(id、mean pwr、max、pwr)——太棒了!但是,数据并没有按照我的意愿同时排列。我希望所有并发(与同一时间步长相关)的最大值和平均功率值都在一行上,相反,我将所有最大值的平均值设置为空,然后是平均值的倒数。有任何想法吗?某种联合?
    • 删除 MAXGROUP BY 完全改变了我对...其他东西的回答。此时,您应该将示例输入数据添加到您的问题中,并向我们展示您期望的确切输出。
    • 谢谢蒂姆。我试图在编辑中的问题中提供更多细节。你怎么看?
    • 没有帮助。您显示了我的回答中的 output 以及您想看到的内容。您需要使用预期的输出对 开始 数据进行采样。
    • 谢谢蒂姆。最后,我通过将两个选择查询与日期的内部连接结合起来解决了这个问题。
    【解决方案2】:

    事实证明,这里的问题只是结合两个选择查询并生成两列“并发”数据。解决这个问题的关键是知道我想输出的每个值都有一个关联的日期,所以最后只是根据日期对两个选择查询进行连接:

    SELECT Max as "Max Power", Mean as "Mean Power" FROM 
    
    (SELECT variables.date as "date", variables.value as "Mean Power"
    FROM variables
    INNER JOIN stat_types ON variables.id=stat_types.id
    WHERE stat_types.name="Mean") as Mean
    
    INNER JOIN
    
    (SELECT variables.date as "date", variables.value as "Max Power"
    FROM variables
    INNER JOIN stat_types ON variables.id=stat_types.id
    WHERE stat_types.name="Max") as Max
    
    ON Max.date=Mean.date
    
    

    感谢您的意见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      相关资源
      最近更新 更多