SQL - 获取相同 table 的行
SQL - get row for same table
我有一个table。
select * from Group
Owner Member1 Member1_Value Member2 Member2_Value
Kelly Nicol 2 Julie 4
Nicol Julie 4 Kelly 3
Julie Kelly 5 Nicol 3
现在我需要从我们的会员那里获得所有者的平均价值。
Owner Member1 Member1_Value Member2 Member2_Value Avg
Kelly Nicol 2 Julie 5 3.5
Nicol Julie 4 Kelly 2 2.5
Julie Kelly 5 Nicol 3 4.5
例如:Kelly 的 Avg 3.5 来自 Nicol 给了 2,Julia 给了 5,Avg 是 3.5。和 Nicol 一样平均分 2.5 因为 Kelly 给了 2 而 Julie 给了 3.
那么我怎样才能从一个 sql 语句
中得到 Avg colum
感谢您的回答
谢谢
如果我理解正确,那么它应该可以工作:
select *, cast((Member1_Value + Member2_Value) as Decimal(10,2))/2 [Avg] from Group
我会说你想要的是这个,但你应该考虑稍微规范化 table 以便能够更轻松地执行此类查询:
SELECT
Name, AVG(Value) AS Value
FROM
(
SELECT
Member1 AS Name,
Member1_Value As Value
FROM Group
UNION ALL
SELECT
Member2 AS Name,
Member2_Value As Value
FROM Group
) Normalised
GROUP BY Name
一个更好的table结构将由
会员(会员编号,姓名)
组(GroupId)
GroupMember(会员ID, GroupId)
资格(ProvidingMemberId,ReceivingMemberId,值)
或类似的东西
这似乎是一个非常复杂的数据结构。通常,像 member1
和 member2
这样的列是数据库设计不佳的标志。你真的应该规范化 table.
您似乎希望 other 成员的贡献来自 table 中的匹配行。我认为以下内容可以满足您的需求:
select g.owner, (gm1.member2_value + gm2.member1_value) / 2.0
from group g join
group gm1
on g.owner = gm1.member1 join
group gm2
on g.owner = gm2.member2;
我有一个table。
select * from Group
Owner Member1 Member1_Value Member2 Member2_Value
Kelly Nicol 2 Julie 4
Nicol Julie 4 Kelly 3
Julie Kelly 5 Nicol 3
现在我需要从我们的会员那里获得所有者的平均价值。
Owner Member1 Member1_Value Member2 Member2_Value Avg
Kelly Nicol 2 Julie 5 3.5
Nicol Julie 4 Kelly 2 2.5
Julie Kelly 5 Nicol 3 4.5
例如:Kelly 的 Avg 3.5 来自 Nicol 给了 2,Julia 给了 5,Avg 是 3.5。和 Nicol 一样平均分 2.5 因为 Kelly 给了 2 而 Julie 给了 3.
那么我怎样才能从一个 sql 语句
中得到 Avg colum感谢您的回答
谢谢
如果我理解正确,那么它应该可以工作:
select *, cast((Member1_Value + Member2_Value) as Decimal(10,2))/2 [Avg] from Group
我会说你想要的是这个,但你应该考虑稍微规范化 table 以便能够更轻松地执行此类查询:
SELECT
Name, AVG(Value) AS Value
FROM
(
SELECT
Member1 AS Name,
Member1_Value As Value
FROM Group
UNION ALL
SELECT
Member2 AS Name,
Member2_Value As Value
FROM Group
) Normalised
GROUP BY Name
一个更好的table结构将由
会员(会员编号,姓名) 组(GroupId) GroupMember(会员ID, GroupId) 资格(ProvidingMemberId,ReceivingMemberId,值)
或类似的东西
这似乎是一个非常复杂的数据结构。通常,像 member1
和 member2
这样的列是数据库设计不佳的标志。你真的应该规范化 table.
您似乎希望 other 成员的贡献来自 table 中的匹配行。我认为以下内容可以满足您的需求:
select g.owner, (gm1.member2_value + gm2.member1_value) / 2.0
from group g join
group gm1
on g.owner = gm1.member1 join
group gm2
on g.owner = gm2.member2;