【问题标题】:How can I subtract values within a single column of SQLite table?如何在 SQLite 表的单个列中减去值?
【发布时间】:2017-05-22 04:52:36
【问题描述】:

我在sqlite中的原表如下:

--------------------
names_ID  | values
--------------------
frank     | 31
chris     | 50
chris     | 40
tim       | 65
tim       | 85

然后我应用以下查询:

SELECT names_ID, GROUP_CONCAT(values, ',') FROM table GROUP BY names_ID

从上面的查询我得到下表:

--------------------
names_ID  | values
--------------------
frank     | 31
chris     | 50,40
tim       | 65,85

对于由逗号分隔的两个值的行,我想获取这两个值的百分比(例如,对于“tim”行,百分比将为 65/85 *100 = 76.5)。

我希望我的预期结果是:

--------------------
names_ID  | percent
--------------------
chris     | 80
tim       | 76.5

我无法想出任何接近我想要的输出的尝试。任何帮助表示赞赏。

【问题讨论】:

  • 为什么 chris 和 tim 的数据顺序不同?

标签: sqlite


【解决方案1】:

不需要我认为需要通过 CSV 来回答您的问题。如果每个名称真的只有两个值(最多)与之关联,那么一个简单的GROUP BY 聚合应该可以工作:

SELECT
    names_ID,
    CAST(MIN(values) AS float) / CAST(MAX(values) AS float) * 100 AS percent
FROM yourTable
GROUP BY names_ID
HAVING COUNT(*) = 2

注意:我不喜欢按names_ID 分组的想法,因为即使是一小群人,名字也可能不是唯一的。相反,names_ID 可能应该是一个自动递增列,并且您应该创建一个名为 names 的新列,其中包含实际名称文本。

【讨论】:

  • 我使用以下内容来汇总表行中重复的名称的值:SELECT names_ID, GROUP_CONCAT(values, ',') FROM table GROUP BY names_ID。结果如上表所示。当值在不同的行中时,根据免责声明,您是否有任何建议进行百分比计算?谢谢。
  • @unknown121 不要不要在此处转储您的代码。请告诉我您的查询是否有效。
  • 用于创建带有分隔逗号的后续表格的原始表格现在通过对我的原始帖子的编辑显示。
  • Tim,这没有产生输出。我将“克里斯”和“蒂姆”的百分比都设为零。
  • @unknown121 请尝试我更新的查询。在除法之前将分子和分母都转换为float
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多