首页 > 解决方案 > 如何使用 SQL 合并基于日期的列

问题描述

如果我有以下 SQL my_table

 ╔══════╦═════════════════════╦═══════════╦═══════════════╗
 ║  id  ║    date_recorded    ║ new_entry ║ price_updated ║
 ╠══════╬═════════════════════╬═══════════╬═══════════════╣
 ║ ...  ║ ...                 ║    ...    ║      ...      ║
 ║ 120  ║ 2020-02-13 18:53:49 ║    15     ║      13       ║
 ║ 121  ║ 2020-02-14 00:52:58 ║     5     ║       2       ║
 ║ 122  ║ 2020-02-14 06:53:38 ║     1     ║       4       ║
 ║ 123  ║ 2020-02-14 12:54:21 ║     5     ║       1       ║
 ║ 124  ║ 2020-02-14 18:54:50 ║     9     ║       9       ║
 ║ 125  ║ 2020-02-15 00:54:45 ║     7     ║      11       ║
 ║ ...  ║ ...                 ║    ...    ║      ...      ║
 ╚══════╩═════════════════════╩═══════════╩═══════════════╝

问题:

我将如何编写一个 SQL 查询来查询其中的所有日期,my_table以便输出只是日期,并且new_entry&price_updated列被合并到一行中,用于该date_recorded列中的所有日期:

 ╔═════════════════╦═══════════╦═══════════════╗
 ║  date_recorded  ║ new_entry ║ price_updated ║
 ╠═════════════════╬═══════════╬═══════════════╣
 ║ ...             ║    ...    ║      ...      ║
 ║ 2020-02-13      ║    15     ║      13       ║
 ║ 2020-02-14      ║    20  #  ║      16 *     ║  #20 = 5 + 1 + 5 + 9  |  *16 = 2 + 4 + 9 + 1
 ║ 2020-02-15      ║     7     ║      11       ║ 
 ║ ...             ║    ...    ║      ...      ║
 ╚═════════════════╩═══════════╩═══════════════╝

标签: mysql

解决方案


您可以只使用一个表达式,对 and 值进行GROUP BY分组并计算and值:DATEdate_recordedSUMnew_entryprice_updated

SELECT DATE(date_recorded) AS date_recorded,
       SUM(new_entry) AS new_entry,
       SUM(price_updated) AS price_updated
FROM my_table
GROUP BY DATE(date_recorded)

SQLFiddle 上的演示


推荐阅读