在同一列内相乘

Posted

技术标签:

【中文标题】在同一列内相乘【英文标题】:Multiply within same column 【发布时间】:2021-06-16 14:32:17 【问题描述】:

我有一个如下所示的表格:

label value
student1 90
student2 88
student3 59
student4 77

如果两个值满足条件,我会尝试将它们相乘。 例如,我想将学生 1 和 3 的值相乘。然后我想将学生 2 和 4 的值相乘。

对于第一个条件,我尝试了以下代码:

select 
    case 
        when 
            max(label) = "student1" or max(label) = "student3" then exp(SUM(log(value))) else 0 end as nominator
from four_students_table 

不幸的是,它给了我 0 的值。我也尝试将它们加在一起,但又得到了 0。我不确定我在这里做错了什么。

预期输出:

numerator denominator
5,310 6,776

【问题讨论】:

显示预期输出 将其添加到问题@MikhailBerlyant 只有4个学生吗?您在共享的sql 中使用了列calc,但这在您的共享数据集中不存在。什么是calc @ggordon 是的,只有 4 名学生。 抱歉,“calc”应该是“value”。我现在要修复它。但即便如此,我仍然得到 0 【参考方案1】:

如下例所示,我 case statement 将有助于过滤您想要聚合的内容。

以下小提琴提供了您想要的结果:

CREATE TABLE four_students_table (
  label VARCHAR(8),
  value INTEGER
);

INSERT INTO four_students_table
  (label, value)
VALUES
  ('student1', '90'),
  ('student2', '88'),
  ('student3', '59'),
  ('student4', '77');

查询 #1

SELECT
    SUM(CASE WHEN label='student1' THEN value ELSE 0 END)*
    SUM(CASE WHEN label='student3' THEN value ELSE 0 END) as nominator,
    SUM(CASE WHEN label='student2' THEN value ELSE 0 END)*
    SUM(CASE WHEN label='student4' THEN value ELSE 0 END) as denominator
FROM
    four_students_table;
nominator denominator
5310 6776

View on DB Fiddle

【讨论】:

【参考方案2】:

考虑以下(我觉得这更符合您在问题中的意图/示例)

select distinct
  round(exp(sum(if(label in ('student1', 'student3'), ln(value), 0)) over())) as nominator,
  round(exp(sum(if(label in ('student2', 'student4'), ln(value), 0)) over())) as denominator
from `project.dataset.four_students_table`    

如果应用于您问题中的样本数据 - 输出是

【讨论】:

以上是关于在同一列内相乘的主要内容,如果未能解决你的问题,请参考以下文章

数据表列内的 MySQL 循环

如何在颤动的列内使用 StaggeredGridView?

修剪列内的额外空白

如何在列内垂直和水平居中文本? [复制]

如何在 3 列内水平对齐图片及其标题

扑。如何在列内创建树形图结构