【问题标题】:Creating multiple average price columns for data on sql为sql上的数据创建多个平均价格列
【发布时间】:2021-01-01 04:30:09
【问题描述】:

我创建了一个名为“股票”的表格,其中包含 5 家不同汽车公司在 6 天内的股价信息。对于每一天,股票价格以 3 个不同的时间间隔计算。我找到了一种方法来编码每家公司 1 天的平均股价,但我不确定如何创建更多列,以便我获得每家公司每天的平均股价,即列将是:名称,2020 年 9 月 8 日的平均价格,2020 年 9 月 9 日的平均价格,2020 年 9 月 10 日的平均价格等。我使用的数据表包含 6 个不同天收集的数据 - 部分如下所示.

我的代码如下所示,目前的输出显示在最顶部。

SELECT name, SUBSTR(date_time, 1, 10) AS 'date', ROUND(AVG(price), 2) AS 'average price'
FROM stocks
WHERE SUBSTR(date_time, 1, 10) = '2020:09:08'
GROUP BY name;

【问题讨论】:

  • 你的样本数据只有一个日期,所以你想要做什么有点混乱。
  • 顶部显示了我的代码的输出,底部显示了我的示例数据。抱歉,有点混乱

标签: sql sqlite


【解决方案1】:

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

SELECT name, 
       ROUND(AVG(CASE WHEN SUBSTR(date_time, 1, 10) = '2020:09:08' THEN price END), 2) AS [average price 2020:09:08], 
       ROUND(AVG(CASE WHEN SUBSTR(date_time, 1, 10) = '2020:09:09' THEN price END), 2) AS [average price 2020:09:09], 
       ROUND(AVG(CASE WHEN SUBSTR(date_time, 1, 10) = '2020:09:10' THEN price END), 2) AS [average price 2020:09:10] 
FROM stocks
WHERE SUBSTR(date_time, 1, 10) BETWEEN '2020:09:08' AND '2020:09:10'
GROUP BY name;

就像您之前的问题一样,我建议您将日期格式更改为YYYY-MM-DD hh:mm:ss,这样您就不需要字符串函数来处理日期。

您可以像这样更新表格:

UPDATE stocks
SET date_time = REPLACE(SUBSTR(date_time, 1, 10), ':', '-') || SUBSTR(date_time, -9)

如果您更新表,则可以使用函数DATE() 来简化查询以提取日期时间的日期部分:

SELECT name, 
       ROUND(AVG(CASE WHEN DATE(date_time) = '2020-09-08' THEN price END), 2) AS [average price 2020:09:08], 
       ROUND(AVG(CASE WHEN DATE(date_time) = '2020-09-09' THEN price END), 2) AS [average price 2020:09:09], 
       ROUND(AVG(CASE WHEN DATE(date_time) = '2020-09-10' THEN price END), 2) AS [average price 2020:09:10] 
FROM stocks
WHERE DATE(date_time) BETWEEN '2020-09-08' AND '2020-09-10'
GROUP BY name;

【讨论】:

  • 是否有代码可以用来更改日期格式,而不是删除所有条目并手动重新输入?
  • SELECT name, ROUND(AVG(price WHERE date_time = '2020-09-08'), 2) as 'avg price 2020-09-08'; ------ 我现在尝试使用此代码替换您发布的原始答案,但我无法让它工作;更改日期格式如何帮助我找到每个日期的平均值?
  • AVG(price WHERE date_time = '2020-09-08') 在语法上不正确。您需要一个 CASE 表达式。检查我的查询。
  • 如果您进行了更新,请检查我的第二个查询。
  • @GuntashMangat 我的第二个查询的 WHERE 子句中有错字。立即检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
相关资源
最近更新 更多