mysql 使用 GROUP BY 进行数据透视查询结果

2023-12-05

我有一个数据表,我想将其导出为 CSV。理想情况下,我想交换行和列,以便数据更好地分组。

进一步解释一下,目前,数据库看起来像这样:

data_id     data_timestamp         data_value    
--------------------------------------------
1           2011-07-07 00:01:00    0.400  
1           2011-07-07 00:02:00    0.500
1           2011-07-07 00:03:00    0.600
1           2011-07-07 00:04:00    0.700
2           2011-07-07 00:01:00    0.100  
2           2011-07-07 00:02:00    0.200
2           2011-07-07 00:03:00    0.250
2           2011-07-07 00:04:00    2.300

我想要按 data_timestamp 值对 data_value 进行分组,以便对时间戳进行分组,并且每个 data_id 的每个 data_value 显示在列中,而不是行中。

data_timestamp         input_1    input_2     
--------------------------------------------
2011-07-07 00:01:00    0.400      0.100  
2011-07-07 00:02:00    0.500      0.200
2011-07-07 00:03:00    0.600      0.250
2011-07-07 00:04:00    0.700      2.300

下面是我正在使用的查询...

SELECT d.data_timestamp, d.input_1, d.input_2
FROM (
    SELECT data_timestamp,
    IF(data_id=1,data_value,NULL) AS 'input_1',
    IF(data_id=2,data_value,NULL) AS 'input_2' FROM data
) AS d ORDER BY data_timestamp ASC

但这并不完全是我想要的,因为现在每当一个 data_id 没有值时就会有 NULL 值。 GROUP BY 似乎也对 data_value 进行分组,这不是我想要的。

有什么建议么?

EDIT:

我已经尝试在外部查询中使用 WHERE d.input_1 IS NOT NULL,但无法完全得到结果。

在哪里之前...

data_timestamp         input_1    input_2     
--------------------------------------------
2011-07-07 00:01:00    0.400      NULL
2011-07-07 00:01:00    NULL       0.100  
2011-07-07 00:02:00    0.500      NULL
2011-07-07 00:02:00    NULL       0.200
2011-07-07 00:03:00    0.600      NULL
2011-07-07 00:03:00    NULL       0.250
2011-07-07 00:04:00    0.700      NULL
2011-07-07 00:04:00    NULL       2.300

添加 WHERE d.input_1 IS NOT NULL 将删除 input_2 值。

data_timestamp         input_1    input_2     
--------------------------------------------
2011-07-07 00:01:00    0.400      NULL
2011-07-07 00:02:00    0.500      NULL
2011-07-07 00:03:00    0.600      NULL
2011-07-07 00:04:00    0.700      NULL

另外,实际上,我有大约 20 个 id 可供分组,所以对它们进行“或”也不是最好的想法。


PIVOT做起来既不容易(也不好)。我更喜欢使用CASE:

SELECT d.data_timestamp
     , SUM( CASE WHEN data_id =  1 THEN data_value ELSE 0 END ) AS 'input_1'
     , SUM( CASE WHEN data_id =  2 THEN data_value ELSE 0 END ) AS 'input_2'
     ...
     , SUM( CASE WHEN data_id = 20 THEN data_value ELSE 0 END ) AS 'input_20'
FROM data 
GROUP BY data_timestamp
ORDER BY data_timestamp ASC

but IF在 MySQL 中也可以工作:

SELECT d.data_timestamp
     , SUM( IF(data_id =  1, data_value, 0) ) AS 'input_1'
     , SUM( IF(data_id =  2, data_value, 0) ) AS 'input_2'
     ...
     , SUM( IF(data_id = 20, data_value, 0) ) AS 'input_20'
FROM data 
GROUP BY data_timestamp
ORDER BY data_timestamp ASC

或者,您可以使用 20 级JOIN:

SELECT d.data_timestamp
     , d01.data_value AS 'input_1'
     , d02.data_value AS 'input_2'
     ...
     , d20.data_value AS 'input_20'
FROM
  ( SELECT DISTINCT d.data_timestamp
    FROM data
  ) AS d 
  LEFT JOIN data AS d01
    ON d01.data_timestamp = d.data_timestamp
    AND d01.data_id =  1
  LEFT JOIN data AS d02
    ON d02.data_timestamp = d.data_timestamp
    AND d02.data_id =  2
  ...                                   --- 20 JOINs
  LEFT JOIN data AS d20
    ON d20.data_timestamp = d.data_timestamp
    AND d20.data_id = 20
ORDER BY d.data_timestamp ASC
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql 使用 GROUP BY 进行数据透视查询结果 的相关文章

  • 计算 mysql 数据库行数的最佳方法

    在遇到 mysql 查询加载时间慢的问题后 我现在正在寻找计算行数的最佳方法 我曾经愚蠢地使用过mysql num rows 函数来做到这一点 现在意识到这是最糟糕的方法 我实际上正在制作一个分页来用 PHP 制作页面 我找到了几种计算行数
  • 当有很多列时,使用 readr::read_csv() 导入数据时覆盖列类型

    我正在尝试使用 R 中的 readr read csv 读取 csv 文件 我导入的 csv 文件大约有 150 列 我只包含示例的前几列 我希望将第二列从默认类型 我执行 read csv 时为日期 覆盖为字符或其他日期格式 GIS Jo
  • 当复选框条件更改时,如何使用ajax更新mysql数据库?

    我有一个在客户端按行显示的文章表 每篇文章都有一个唯一的 ID 并包含一个复选框以指示该文章是否被选中为收藏夹 如果它是最喜欢的 则该复选框已被选中 如果没有 则未选中 现在 如果特定于每一行的复选框条件发生变化 我需要 js 或 jque
  • 分组和切换列和行

    我不知道这是否会被正式称为枢轴 但我想要的结果是这样的 Alex Charley Liza 213 345 1 23 111 5 42 52 2 323 5 23 1 324 5 我的输入数据采用这种形式 Apt Name
  • MySQL - 选择一行 - 然后相对于所选行的下一个和上一个

    我会尽力澄清这一点 我需要在不使用 id 的情况下选择特定行和该选定行的前一个相对行以及该选定行的下一个相对行 这可能吗 简而言之 上一篇和下一篇 我不能 也许我只是不知道如何 使用 id 的原因是因为它们不是按顺序排列的 正如您从这个相当
  • 在一个后台为MYSQL的网站上集成搜索

    我有一个位置搜索website http www jammulinks com对于一个城市 我们首先收集该城市所有可能类别的数据 如学校 学院 百货商店等 并将其信息存储在单独的表中 因为每个条目除了名称 地址和电话号码外都有不同的详细信息
  • 仅将 pandas df 的前 N ​​行写入 csv

    如何仅将前 N 行或从 P 到 Q 行从 pandas 数据帧写入 csv 而不首先对 df 进行子集化 由于内存问题 我无法对要导出的数据进行子集化 我正在考虑一个逐行写入 csv 的函数 谢谢 Use head https pandas
  • 如何将 MySQL 查询输出保存到 Excel 或 .txt 文件? [复制]

    这个问题在这里已经有答案了 如何将 MySQL 查询的输出保存到 MS Excel 工作表 即使只能将数据存储在 txt文件 就可以了 From 将 MySQL 查询结果保存到文本或 CSV 文件中 http www tech recipe
  • PHP使用auto_increment生成短唯一ID?

    我想生成一个简短的 唯一的 ID 而不必检查冲突 我目前正在做类似的事情 但是我当前生成的 ID 是随机的 并且在循环中检查冲突很烦人 并且如果记录数量显着增加 将会变得昂贵 通常担心冲突不是问题 但我想要生成的唯一 ID 是一个由 5 8
  • 猪的组连接等效吗?

    试图在 Pig 上完成这个任务 寻找 MySQL 的 group concat 等效项 例如 在我的表中 我有以下内容 3fields userid clickcount pagenumber 155 2 12 155 3 133 155
  • Pandas 将多行列数据帧转换为单行多列数据帧

    我的数据框如下 code df Car measurements Before After amb temp 30 268212 26 627491 engine temp 41 812730 39 254255 engine eff 15
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • 从 call_log 中获取最大并发通话数

    我需要帮助在 MySQL 5 0 77 中编写一个查询 根据下面所示的数据 办公室一天的通话量 返回并发电话呼叫的峰值数量 我只是想知道一天中任何特定时间同时打电话的人数最多是多少 首先 这是 MySQL 表 CREATE TABLE ca
  • NHibernate - 无法执行查询 - 输入字符串的格式不正确

    我已经为此摸不着头脑有一段时间了 我不知道出了什么问题 概述 我的 MySQL 数据库中有两个表 两者都正确映射到数据库 我可以加载数据 并且我能够查询一个表 但不能查询另一个表 我研究过的解决方案 表和 C 代码之间的类型转换问题 映射问
  • 无法在 Zend Framework 中回滚事务

    我在 Zend Framework 中使用以下代码进行事务 但回滚功能不起作用 数据通过 insertSome data 插入数据库 怎么了 db gt beginTransaction try model gt insertSome da
  • SuperCSV 附加而不是覆盖?

    是否可以向 CSV 文件添加新行 而不是覆盖最后一行 这是当我想添加新行时调用的方法 private static void writeWithCsvMapWriter throws Exception final String heade
  • MVCC 如何与 MySql 中的 Lock 配合使用?

    我知道Mysql中使用锁或者MVCC可以实现并发控制 比如可重复读 但我不知道MVCC如何避免幻读 在其他地方了解到一般是通过MVCC和Gap Lock来实现的 但是目前我理解的是MVCC不需要锁 即更新和删除都是使用undo log来实现
  • JDBC 错误:在结果集开始之前[重复]

    这个问题在这里已经有答案了 我在 Java Eclipse 中收到错误消息 我在 MySql 中有一个数据库 它有列 String user name int id time int id desk int user password 我想
  • 使用 dtypes read_csv 但列中没有值[重复]

    这个问题在这里已经有答案了 我使用以下代码来读取 csv 通过指定每个列的类型 clean pdf type pd read csv table updated csv usecols col names dtype col types 但
  • 类型错误:此 COM 对象无法自动执行 makepy 过程 - 请为此对象手动运行 makepy

    这是什么错误 回溯错误 C Users DELL PycharmProjects MyNew venv Scripts python exe C Users DELL PycharmProjects MyNew agaaaaain py T

随机推荐

  • WinForms 中具有 alpha 通道透明度/不透明度的启动屏幕

    如何在 WinForms 中使用具有 alpha 通道透明度 不透明度的图像来实现启动屏幕 看一眼C 中的每像素 Alpha 混合
  • 文化特定数据注释

    我正在尝试获取特定于文化的数据注释 DisplayFormat DataFormatString 0 d public DateTime Date get set 我认为这会起作用 因此 在美国 它会显示 DD MM yyyy 在欧洲 它会
  • Snow Leopard、Django 和 PIL 的问题

    自从升级到 Snow Leopard 以来 我在让 Django 和 PIL 正常工作时遇到了一些问题 我已经安装了 freetype libjpeg 和 PIL 它告诉我 TKINTER support ok JPEG support o
  • 在 kotlin lambda 内部返回时“此处不允许返回”

    我使用 lambda 来处理异步调用的回调 我想在调用方法之外定义回调以避免使用庞大的方法 但我似乎无法在 lambda 中使用早期返回 这使得代码不必要地难以阅读 我尝试将 lambda 定义为变量 但 return 在 lambda 内
  • Promise 的动态顺序执行

    我有需要按顺序运行的动态数量的承诺 我了解如何按顺序运行承诺 但我无法成功地使其与许多可能变化的承诺保持动态 这是我发现静态执行此操作的一种方法如何兑现一个又一个的承诺 function waitFor timeout return new
  • Python实时绘制ROS数据

    我正在尝试使用 python 绘制传入计算机的实时数据 数据来自 ROS 主题 我使用 rospy 订阅该主题以获取数据 这是我写的代码 import rospy from sensor msgs msg import ChannelFlo
  • 如何使我的所有网址都无扩展名,且不带尾部斜杠。并将 .php 和尾部斜杠重定向为无?

    我想让我的所有网址统一干净 这意味着我所有的 URL 都没有扩展名 也没有尾部斜线 并且如果一个人确实输入了 php或尾部斜杠 它只会将用户重定向到干净的 URL Example example com blog file php and
  • 如何对 UTF-8 字符使用 String 方法?

    如何对 UTF 8 字符使用 String 方法 例如 我有一个带有西里尔字符的字符串 所以当我使用string upcase它不起作用 Ruby 仅支持字母的大小写转换A Z and a z 原因很简单 其他字母的大小写转换没有明确定义
  • Resteasy 客户端的自定义 Jackson 序列化器

    是否可以为 Resteasy 客户端注册自定义 Jackson JSON 序列化器 我尝试过做类似的事情 ResteasyClient client new ResteasyClientBuilder register new Custom
  • 为什么没有更多的迭代器随机访问?

    我正在尝试了解有关 C 中的 STL 迭代器的更多信息 我理解不同的数据结构如何具有不同的迭代器 但我不明白为什么有些迭代器不是随机访问 例如 为什么 LinkedList 迭代器不是随机访问迭代器 我知道 LinkedList 本身并不是
  • 汇编 (,%eax,4)

    如果我的命令行之一显示 jmp 0x804a180 eax 4 这意味着什么 我特别询问是因为第一个逗号之前没有值 而且我不确定地址之前的 到底是什么意思 该指令跳转到其值位于计算得出的地址处的位置 eax 4 0x804a180 The
  • C# 调用一个 DLL 函数,该函数返回一个指向结构数组的指针

    我尝试了各种方法的许多不同组合来封送此调用 这是一个 DLL 它返回一个指向结构数组的指针 像 debugPort 这样的类型实际上是枚举 struct debugConnectParameters brief Get device cha
  • 从 PHP 脚本执行 shell 脚本

    我想从 PHP 脚本执行系统上存在的 Bash 脚本 我的系统上有两个脚本 其中之一是名为的 PHP 脚本client php目前在 var www html另一个是名为的 Bash 脚本testscript目前在 home testuse
  • Android的WebView.loadUrl方法中Url的长度有限制吗?

    我想将本地资源 传输 到从远程服务器加载的页面 我想做这样的事情 webView loadUrl http my server com page html webView loadUrl javascript function someLo
  • Perl:无法使用 SSL 访问 Web 服务

    这是我的第一个 Perl 脚本 我已经使用 CPAN 安装了 SOAP Lite 看起来一切顺利 我正在尝试访问一个简单的 HelloWorld NET Web 服务 我收到一个错误 该错误似乎与 Perl 或 SOAP Lite 无法验证
  • 在 WP7 中向 xml 文件添加元素?

    如何在 wp7 中向 xml 文件添加元素 我找到了很多资料显示如何在 ASP NET 浏览器上的 Silverlight 等中添加元素 但在 wp7 上却没有 我一直看到我们应该使用 XDocument XML to Linq 只是不知道
  • 这是什么意思?

    我正在分析一些 Python 代码 但我不知道是什么 pop population 方法 它是类似于Java中的数组列表还是二维数组 这是切片表示法的一个示例 它的作用取决于切片的类型population If population是一个列
  • 为什么“man bash”页面声明“declare”和“local”“-n”属性“不能应用于数组变量”,但它却可以?

    为什么local n当手册时处理数组变量明确表示不 说明书有错吗 这是否依赖于某种 bash 未定义的行为 说明书已经过时了吗 我错过了什么吗 以下是我从 bash 手册中查看的信息 Run man bash并搜索local 使用正则表达式
  • Spring 批处理:JdbcPagingItemReader 无法获取第 1 页以后的页面

    这是我的读者 Bean public ItemReader
  • mysql 使用 GROUP BY 进行数据透视查询结果

    我有一个数据表 我想将其导出为 CSV 理想情况下 我想交换行和列 以便数据更好地分组 进一步解释一下 目前 数据库看起来像这样 data id data timestamp data value 1 2011 07 07 00 01 00