SQL-用于在行之间划分值的函数
我通常不做数据库编程,所以我不知道如何做某些事情。但我有一个问题,我要拿一个项目,如果这个项目在同一个位置,但在不同的位置,将所述项目的价值除以两个位置之间的总和计数 以下是我的表格结构:SQL-用于在行之间划分值的函数,sql,hive,hql,Sql,Hive,Hql,我通常不做数据库编程,所以我不知道如何做某些事情。但我有一个问题,我要拿一个项目,如果这个项目在同一个位置,但在不同的位置,将所述项目的价值除以两个位置之间的总和计数 以下是我的表格结构: LOCATION PLACEMENT VALUE COUNT ITEM 25 12345 100 10 55555 <---- 25 67890 100 20 55555 <---- 25
LOCATION PLACEMENT VALUE COUNT ITEM
25 12345 100 10 55555 <----
25 67890 100 20 55555 <----
25 11111 50 5 00000
25 22222 75 5 11111
位置放置值计数项
25 12345 100 10 55555可能有一种更有效的方法,但您可以通过两个步骤将项目计数相加,然后通过将其除以来创建新值
create table new as select
item, sum(count) as item_count
from old
group by item, location, placement;
create table new2 as select
a.*,
b.item_count,
a.count/b.item_count as new_count
from old a
left join new b
on a.item=b.item;
可能有一种更有效的方法,但您可以通过两个步骤将项目计数相加,然后通过将其除以来创建新值
create table new as select
item, sum(count) as item_count
from old
group by item, location, placement;
create table new2 as select
a.*,
b.item_count,
a.count/b.item_count as new_count
from old a
left join new b
on a.item=b.item;
输出
location placement value count item
25 12345 33.33333333333333 10 55555
25 67890 66.66666666666666 20 55555
25 11111 50.0 5 00000
25 22222 75.0 5 11111
如果您输入相同的位置和不同的项目
LOCATION PLACEMENT VALUE COUNT ITEM
25 12345 100 10 55555 <----
25 12345 100 20 55555 <----
25 11111 50 5 00000
25 22222 75 5 11111
好的,如果您有其他要求,请告诉我
输出
location placement value count item
25 12345 33.33333333333333 10 55555
25 67890 66.66666666666666 20 55555
25 11111 50.0 5 00000
25 22222 75.0 5 11111
如果您输入相同的位置和不同的项目
LOCATION PLACEMENT VALUE COUNT ITEM
25 12345 100 10 55555 <----
25 12345 100 20 55555 <----
25 11111 50 5 00000
25 22222 75 5 11111
好的,如果您还有其他要求,请告诉我。您的样品表
SELECT * INTO #TEMP FROM
(
SELECT 25 LOCATION,12345 PLACEMENT,100 VALUE ,10 [COUNT], 55555 ITEM
UNION ALL
SELECT 25 , 67890 , 100 , 20,55555
UNION ALL
SELECT 25 , 11111 , 50 , 5,00000
UNION ALL
SELECT 25 , 22222 , 75 , 5, 11111
)TAB
你的结果如下
SELECT *,
CAST(([COUNT]/CAST(SUM([COUNT]) OVER(PARTITION BY ITEM)AS NUMERIC(20,2)))*VALUE AS NUMERIC(20,1)) Result
FROM #TEMP
您的样本表
SELECT * INTO #TEMP FROM
(
SELECT 25 LOCATION,12345 PLACEMENT,100 VALUE ,10 [COUNT], 55555 ITEM
UNION ALL
SELECT 25 , 67890 , 100 , 20,55555
UNION ALL
SELECT 25 , 11111 , 50 , 5,00000
UNION ALL
SELECT 25 , 22222 , 75 , 5, 11111
)TAB
你的结果如下
SELECT *,
CAST(([COUNT]/CAST(SUM([COUNT]) OVER(PARTITION BY ITEM)AS NUMERIC(20,2)))*VALUE AS NUMERIC(20,1)) Result
FROM #TEMP
第二行实际为20…对不起,我错了,但我不需要我需要根据具有相同项目的行之间的总计数除以100第二行实际为20…对不起,但是我不需要,我需要将总计数除以100,在具有相同项的行之间添加这个最初效果很好。不得不稍微调整一下。我注意到您在计数和放置=2
的位置执行了此操作。我应该说有2个或更多。有没有方法对值列求和?当我尝试在计算周围放置一个求和函数时,我得到“尚未支持UDAF‘sum’的位置”。当您的计数和位置>2时,在这种情况下,您只需更改,当查询中的a.count>1和a.dist_placement>1时,它就会起作用。添加此函数最初效果很好。不得不稍微调整一下。我注意到您在计数和放置=2
的位置执行了此操作。我应该说有2个或更多。有没有方法对值列求和?当我尝试在计算周围放置一个求和函数时,我得到“尚未支持UDAF‘sum’的位置”。当您的计数和位置>2时,在这种情况下,您只需更改,当查询中的a.count>1和a.dist_位置>1时,它将起作用。