根据条件更新具有不同值的表

时间:2016-03-16 09:07:33

标签: sql postgresql associations

我有一张表格,其中包含有关芝加哥不同社区的社会经济信息,例如无家可归者的百分比,贫困家庭的百分比等。现在我想做的是为每个领域的价值创建箱子,如果百分比低于所有行的平均值,则该值设置为0,而如果百分比等于或高于平均值,则设置为1.

我想这样做,以便我可以使用垃圾箱找到关联规则。

到目前为止,我已经提出了以下问题:

WITH avg AS (SELECT AVG(crowded_housing) AS ch from   
algorithms.socioeconomic_bins)
UPDATE algorithms.socioeconomic_bins SET crowded_housing=0 where     
crowded_housing<(SELECT ch FROM avg);

这本身就有用,但由于我有8列我想要bin,我必须为每个字段运行此查询两次(对于低于和高于avg)。我找不到任何有用的页面或问题。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以像这样使用CASE EXPRESSION:

WITH avg AS (SELECT AVG(crowded_housing) AS ch from   
algorithms.socioeconomic_bins)
UPDATE algorithms.socioeconomic_bins
SET crowded_housing= CASE WHEN crowded_housing < (SELECT ch FROM avg) 
                          THEN 0
                          ELSE 1
                     END

这将在一个查询中更新表,并将在WHERE子句上分配值。