从单个MYSQL请求中选择两个变量

从单个MYSQL请求中选择两个变量,mysql,sql,select,Mysql,Sql,Select,我试图根据一个变量的值从同一个MySQL请求中提取两个变量。我可以在两个单独的查询中提取这些变量,但我确信必须能够将它们组合起来,在一个语句中生成两列/两列数据,可能是一个if语句 我有一个JOIN语句,有点让我抓狂 第一项请求: SELECT variables.value as "Mean Power" FROM variables INNER JOIN stat_types ON variables.id=stat_types.id WHERE stat_types.n

我试图根据一个变量的值从同一个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_类型名称从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作为输出。对于每个值,我还有一个timestep,如果需要,可以使用它。每个时间步都有一个最大值和平均值(相同数量的值)
谢谢

您可以在此处使用条件聚合:

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;

事实证明,这里的问题只是合并两个select查询并生成两列“并发”数据。解决这个问题的关键是知道我想要输出的每个值都有一个关联的日期,因此最终它只是基于日期将两个select查询连接起来的一个例子:

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


感谢您的意见

非常感谢您的评论。我已经尝试过实现它,但我有一个问题:我不想要一个max值,而是整个时间序列——所以我删除了max命令。出于同样的原因,我还删除了groupby命令。这样做会产生3列(id,mean pwr,max,pwr)-太棒了!然而,数据并没有像我希望的那样同时排列。我希望所有并发(与同一时间步相关)的最大功率值和平均功率值都在一行上,相反,我将所有最大功率值的平均值设置为null,然后将平均值的倒数设置为null。有什么想法吗?某种形式的联合?删除
MAX
groupby
完全改变了我对其他事物的回答。此时,您应该在问题中添加示例输入数据,并向我们显示您期望的确切输出。谢谢Tim。我试图在编辑中对我的问题进行更详细的阐述。你觉得呢?没用。您显示了我的答案的输出以及您希望看到的内容。您需要使用预期的输出对开始数据进行采样。谢谢Tim。最后,我通过将两个select查询与日期的内部联接结合起来,解决了这个问题。