因此,我有几个表,我想看看如何将其中一个列的相关性表示为表中的一个列。
例如,假设我有两个表:
如果我想要一个输出为
attribute | correlation
battingAverage | .025
slugging | .005
...
我怎样才能做到这一点呢?我知道我可以使用CORR函数来查找两列之间的相关性,但我不知道如何将它应用于整个列,以及如何将该列及其相关性显示为一行。
现在,我正在尝试在使用(value (),(),.)中对其进行硬编码。但是,我收到一个错误,说我的子查询在用作表达式时返回多行,但是"SELECT“在我的查询中只显示了一次,我也看不到任何表达式。
下面是我现在的模拟查询(我的项目与棒球无关,但我编造了这个例子)
SELECT attributes.attribute, (values
(CORR(Record.wins,Batting.BattingAverage)),
(CORR(Record.wins,Batting.slugging)),
(CORR(Record.wins,batting.OBP)),
(CORR(Record.wins,batting.HomeRuns)))
AS correlation
FROM Batting LEFT JOIN Record ON Batting.Team = Record.Team,(values
('Batting Average'),
('Slugging'),
('OBP'),
('Home Runs')) attributes(attribute)
GROUP BY attributes.attribute;
发布于 2016-10-30 23:18:00
如果您希望每列有一行,则必须以某种方式生成这些行。您正在尝试使用交叉连接(如果您将其命名为CROSS JOIN
而不是,
,则该连接的可读性会稍微好一些)。但是,您没有将select子句与所需的属性关联起来。
SELECT
attributes.attribute,
CORR(Record.wins,
case attributes.attribute
when 'Batting Average' then Batting.BattingAverage
when 'Slugging' then Batting.slugging
when 'OBP' then Batting.OBP
when 'Home Runs' then Batting.HomeRuns
end
) AS correlation
FROM Batting
JOIN Record ON Batting.Team = Record.Team
CROSS JOIN (values
('Batting Average'),
('Slugging'),
('OBP'),
('Home Runs')) attributes(attribute)
GROUP BY attributes.attribute;
但是,我不太确定,建立一个笛卡儿积是否与相关性有关。我认为这并不是因为所有的行都具有相同的因素,但我不熟悉统计和相关计算。
我宁愿保持轻松和安全:
SELECT 'Batting Average' AS attribute, CORR(r.wins, b.BattingAverage) AS correlation
FROM Batting b JOIN Record r ON b.Team = r.Team
UNION ALL
SELECT 'Slugging' AS attribute, CORR(r.wins, b.slugging) AS correlation
FROM Batting b JOIN Record r ON b.Team = r.Team
UNION ALL
SELECT 'OBP' AS attribute, CORR(r.wins, b.OBP) AS correlation
FROM Batting b JOIN Record r ON b.Team = r.Team
UNION ALL
SELECT 'Home Runs' AS attribute, CORR(r.wins, b.HomeRuns) AS correlation
FROM Batting b JOIN Record r ON b.Team = r.Team
一个简单的选择应该是UNPIVOT
。然而,我从未使用过它,但是查找语法应该很容易。我想UNPIVOT
实际上是最合适的解决方案。
https://stackoverflow.com/questions/40335788
复制