sql - 我想从同一列的特定数据中选择一个内部进行计算。这可能吗?
问题描述
我想做一个 SUM 计算,它多次调用我的“Q”和QBUYERS
列,但在不同的行
中,这是我的表:
group type Q QBUYERS
GROUP1 sent 300 200
GROUP2 shown 400 100
GROUP3 sent 200 150`
这就是我想要做的:
SELECT
notification_batch_id AS group,
(secondrow) QBUYERS AS PAYERS_EXPOSED,
SUM(
CASE
WHEN (firstrow)Q <> 0 AND (secondrow)Q <> 0 AND (thirdrow)Q <> 0
THEN (
(
((firstrow)QBUYERS / (firstrow)Q) -
((thirdrow)QBUYERS / (thirdrow)Q)
) / ((secondrow)Q / (firstrow)Q)
)
ELSE 0
END
) AS CVR_INCREMENTAL FROM MYTABLE
GROUP BY group;
基本上在我的数值之间进行计算,然后对我的结果进行分组。但我不知道如何在不选择整个列的情况下“调用”我的 300、400、200 等。
我也试过这个:
SELECT
b.QBUYERS AS PAYERS_EXPOSED,
SUM(
CASE
WHEN a.Q <> 0 AND b.Q <> 0 AND c.Q <> 0
THEN (((a.QBUYERS / a.Q) - (c.QBUYERS / c.Q)) / (b.Q/a.Q))
ELSE 0
END
) AS CVR_INCREMENTAL
FROM (
SELECT * FROM BASE_FIRST a
UNION
SELECT * FROM BASE_SECOND b
UNION
SELECT * FROM BASE_THIRD c
) AS mytable
BASE_FIRST 是:
group type Q QBUYERS
GROUP1 sent 300 200`
BASE_SECOND 是:
group type Q QBUYERS
GROUP2 sent 400 100`
等等......但它没有工作。
这可以在 TERADATA 上做到吗?
解决方案
我不是 100% 确定我在这里遵循您的逻辑,但是如果您想运行一个仅与您描述的特定情况匹配的查询,那么您的第二个查询非常接近。
只需稍微修改它以使用JOIN
s 而不是UNION
s。这样,您将得到单行,您可以在其中比较您的值SUM()
而不是多行:
SELECT
b.QBUYERS AS PAYERS_EXPOSED,
SUM(
CASE
WHEN a.Q <> 0 AND b.Q <> 0 AND c.Q <> 0
THEN (
(
(a.QBUYERS / a.Q) -
(c.QBUYERS / c.Q)
) / (b.Q / a.Q)
)
ELSE 0
END
) AS CVR_INCREMENTAL
FROM MYTABLE a
INNER JOIN MYTABLE b ON b.group = 'GROUP2'
INNER JOIN MYTABLE c ON c.group = 'GROUP3'
WHERE a.group = 'GROUP1'
这假定您的表中只有三行 - 每一行用于GROUP1, GROUP2, GROUP3
.
如果您想处理不同的、更复杂的场景,请使用此信息更新问题。
推荐阅读
- python - 转化率 神经网络、输出和 y 数据维度
- python - 使用 Django admin import-export 导出给我错误
- ruby - 自制:未定义的方法“min_named”
- android - 华为广告套件 onAdClosed() 回调未触发
- ruby-on-rails - 'ORA-06413: Connection not open' 仅在 Rails 服务器中
- javascript - Chrome Javascript 错误地处理了 1 毫秒的变化
- javascript - 将类添加到单击的项目
- python - Kivy:从python访问小部件内部的画布属性
- r - 如何在 df 中选择多个列并使用 dyplr 在现有列下绑定
- c# - 从一个 Action 原样返回 JSON (PascalCase)