首页 > 解决方案 > 如何在 SQL 中添加包含 ZScore 的新列

问题描述

我正在尝试将名为 [Z Score] 的列更新到我的 SQL 表中。我已经编写了在 SELECT 查询中创建新列的代码,如下所示:

SELECT cd.*
FROM (
       SELECT [Cardholder Name], [Transaction Date], [Merchant], 
       [Debit Amount], 
       (
        [Debit Amount] - 
        AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()
       ) as [ZScore]
       FROM ['PCard Output']
     ) cd;

话虽如此,当谈到使用 UPDATE 查询将数据实际添加到列 [Z 分数] 时,我迷失了方向。我正在使用 SQL Server 17。任何帮助将不胜感激!

标签: sqlsql-servertsql

解决方案


简单地:

UPDATE T
SET YourColumn = cd.[ZScore]
FROM 
(
    SELECT [Cardholder Name], 
           [Transaction Date], 
           [Merchant], 
           [Debit Amount], 
           ([Debit Amount] - AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()) as [ZScore]
    FROM ['PCard Output']
) cd INNER JOIN YourTable T ON cd.ID = T.ID;

请注意,我认为您不需要您选择的其他列,因此您的查询可能如下所示:

UPDATE T
SET YourColumn = cd.[ZScore]
FROM 
(
    SELECT ([Debit Amount] - AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()) as [ZScore]
    FROM ['PCard Output']
) cd INNER JOIN YourTable T ON cd.ID = T.ID;

或者

UPDATE YourTable
SET YourColumn = 
(
    SELECT ([Debit Amount] - AVG([Debit Amount]) OVER ()) / (STDEV([Debit Amount]) OVER ()) as [ZScore]
    FROM ['PCard Output']
);

推荐阅读