按国家和条件索引计算 SQL 分区中的市场总和 [关闭]
Posted
技术标签:
【中文标题】按国家和条件索引计算 SQL 分区中的市场总和 [关闭]【英文标题】:Calculate sum of market in SQL partition by country and index with conditions [closed] 【发布时间】:2020-11-24 07:13:05 【问题描述】:我有一个数据集,我必须在其中按国家/地区和索引计算 SQL Server 分区中的市场总和:
如果按国家/地区的索引仅为 1,则索引标记输出将为 0,如果按国家/地区的 index=>1,则将采用市场价值的总和,而不采用指数 1 的市场价值
要明确,如果指数值只有1,那么indexmark应该是0,如果指数是1并且大于1,那么它将取市场价值的总和,不包括指数1的市场价值
输入:
Country Index Market
--------------------
India 1 100
US 1 200
UK 7 400
US 6 600
UK 3 800
输出:
Country Index Market IndMark
----------------------------
India 1 100 0
US 1 200 600
UK 7 400 1200
US 6 600 600
UK 3 800 1200
我尝试过使用下面的 SQL 查询,但它没有给我预期的结果
SELECT
Country, Index, Market,
SUM(Market) OVER (PARTITION BY Country, (Index > 1) AS IndMark
FROM
table
【问题讨论】:
我不懂逻辑,也看不懂问题,因为表格格式不正确。 mysql 还是 SQL Server?请只标记一个 RDBMS @TimBiegeleisen 现已格式化 图片没用。用他们的 CREATE TABLE + INSERT INTO 替换源数据。 if index is only 1 by country 你的意思是严格意义上的值是1
,还是只有一个不同的index
值(也可能不是1
)
【参考方案1】:
带有SUM()
窗口功能:
SELECT *,
COALESCE(SUM(CASE WHEN [Index] > 1 THEN [Market] END) OVER (PARTITION BY [Country]), 0) [IndexMark]
FROM tablename
请参阅demo。
【讨论】:
如果零/负index
可能会失败,SUM(CASE WHEN [index]=1 THEN 0 ELSE 1 END)
之类的更可靠。如果 index is only 1 by country 表示“只有一个不同的值”,则必须使用 COUNT(DISTINCT index) = 1
。
如果零/负索引可能您在哪里看到零/负索引?
一如既往,OP 只讲述部分事实,并没有提供所有限制 - 所以我认为考虑所有可能的变体是有用的。以上是关于按国家和条件索引计算 SQL 分区中的市场总和 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
从两个表计算分区并在bigquery中使用小于或等于索引的索引
oracle数据库约200W数据查询非常慢,查询需要10几秒,经常查询超时,这个正常吗?有没有啥好的办法解决