Mysql选择同一行的数据

标签 mysql

我对这个查询真的很困惑。我想在一行中获取一个上下文的所有数据。我真的不知道该怎么做。这是表格的示例。

data (table)                               io(table)
IDData    IDIO   ReadVal   No              IDIO   IDContext
1          io1     12       1              io1       c1     
2          io2     12.5     2              io2       c1 
3          io3     11       3              io3       c1 
4          io4     12.2     1              io4       c2  
5          io5     10       2              io5       c2  
6          io6     10.9     3              io6       c2

我想得到这个结果

IDContext    IO-1   IO-2   IO-3
   c1         12    12.5    11
   c2        12.2    10    10.9

我尝试在一个循环中执行此操作以在表格中打印并且它有效,但我想在查询中执行此操作以便速度更快。

实际上,我的查询看起来像这样:

SELECT IDContext, IDInput, ReadVal
FROM data
LEFT JOIN io ON io.IDIO = data.IDIO
ORDER BY IDContext, No

是否可以在一次查询中获得该结果?

最佳答案

您可以使用条件聚合来做到这一点:

SELECT IDContext,
       MAX(CASE WHEN no = 1 THEN data.ReadVal END) as io1,
       MAX(CASE WHEN no = 2 THEN data.ReadVal END) as io2,
       MAX(CASE WHEN no = 3 THEN data.ReadVal END) as io3
FROM data LEFT JOIN
     io
     ON io.IDIO = data.IDIO
GROUP BY IDContext
ORDER BY IDContext;

关于Mysql选择同一行的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30814669/

相关文章:

mysql - 带有便利设施的建筑物的 SQL 结构

PHP数据库连接错误: Connection refused .本地主机工作正常但发生真正的服务器错误

sql - MySQL 插入查询不适用于 WHERE 子句

php - 单击提交按钮后获取 URL 中国家/地区的 ID

mysql - 如何在订购前添加数字到时间(MySQL)

java - 添加数据后刷新表

mysql - SQL:使用 WHERE 过滤器时聚合函数返回 0

php - 获取不包括周末的剩余天数

php - 统计收到的新消息?

mysql - 批处理 MySQL if else 语句