微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何计算 sql server 中多列的方差?

如何解决如何计算 sql server 中多列的方差?

使用包含多个字段的计算结果的临时表,我想计算表中每一列的方差。 问题是查询总是返回 null 如果我不使用 Coalesce 将空值替换为 0。我不明白文档说明 varvarp 函数忽略了空值.

这是表格的外观:

Table data sample

运行以下查询时,它给了我 null

WITH cte
AS (SELECT
  *
FROM [IPA_10])
SELECT
  var("Cell valide" + "Cell invalide" + "Compagnie valide" + "Compagnie invalide" + "Email 1 Invalide" + "Email 2 Invalide"
  + "Adresse Valide" + "Adresse à Valider" + "Adresse Retournée" + "Homme" + "Femme" + "Aucun Genre" +
  "APS Fort" + "APS Moyen" + "APS Faible" + "APS Très Faible" + "Pas d'APS" + "Français" + "Anglais" + "Aucune Langue" +
  "Home Phone Valide" + "Home Phone Invalide" + "MFR" + "Non MFR" + "NAS Valide" + "NAS Invalide" + "Other Phone 1 Valide" +
  "Other Phone 1 Invalide" + "Other Phone 2 Valide" + "Other Phone 2 Invalide" + "Other Phone 3 Valide" + "Other Phone 3 Invalide" +
  "Other Phone 4 Valide" + "Other Phone 4 Invalide" + "Phone Search 1 Valide" + "Phone Search 1 Invalide" + "Phone Search 2 Valide" +
  "Phone Search 2 Invalide" + "Capital - < 100" + "Capital - 100-200" + "Capital - 200-300" + "Capital - 300-400" +
  "Capital - 400-500" + "Capital - 500-600" + "Capital - 600-700" + "Capital - 700-800" + "Capital - 800-900" +
  "Capital - 900-1000" + "Capital - 1000-1500" + "Capital - 1500-2500" + "Capital - > 2500" + "Délinquance – [0-3[" +
  "Délinquance - [3-6[" + "Délinquance - [6-9[" + "Délinquance – [9-12[" + "Délinquance – [12-24[" +
  "Délinquance – [25-36[" + "Délinquance – [36-84[" + "Délinquance – 84 &+" + "DDN - Aucune Valeur" + "Région Saguenay" +
  "Région Outaouais" + "Région Ontario (qc)" + "Région Abitibi-Témiscamingue" + "Région Autres Provinces - États (qc)" +
  "Région Bas Saint-Laurent" + "Région Capitale-Nationale" + "Région Centre-du-Québec" + "Région Chaudière-Appalache" +
  "Région Côte-nord" + "Région Estrie" + "Région Gaspésie" + "Région Lanaudière" + "Région Laurentides" + "Région Laval" +
  "Région Mauricie" + "Région Montérégie" + "Région Montréal" + "Région nord-du-Québec" + "Aucune région (qc)")
FROM cte

使用coalsce 会给我一个结果,但根据我的理解,它是不准确的,因为它会被包含在方差计算中。 如何获得多列的方差?

解决方法

在 Larnu 发表评论后,我像这样重新构造了查询并且它起作用了。 我添加了一个步骤来对每行的所有列求和,然后计算这些结果的方差。

WITH cte
AS (SELECT
  *
FROM [IPA_10]),cte2 as (
SELECT
  id,coalesce(sum("Cell valide"),0) + coalesce(sum("Cell invalide"),0) + coalesce(sum("Compagnie valide"),0) + coalesce(sum("Compagnie invalide"),0) + coalesce(sum("Email 1 Invalide"),0) + coalesce(sum("Email 2 Invalide"),0) + coalesce(sum("Adresse Valide"),0) + coalesce(sum("Adresse à Valider"),0) + coalesce(sum("Adresse Retournée"),0) + coalesce(sum("Homme"),0) + coalesce(sum("Femme"),0) + coalesce(sum("Aucun Genre"),0) + coalesce(sum("APS Fort"),0) + coalesce(sum("APS Moyen"),0) + coalesce(sum("APS Faible"),0) + coalesce(sum("APS Très Faible"),0) + coalesce(sum("Pas d'APS"),0) + coalesce(sum("Français"),0) + coalesce(sum("Anglais"),0) + coalesce(sum("Aucune Langue"),0) + coalesce(sum("Home Phone Valide"),0) + coalesce(sum("Home Phone Invalide"),0) + coalesce(sum("MFR"),0) + coalesce(sum("Non MFR"),0) + coalesce(sum("NAS Valide"),0) + coalesce(sum("NAS Invalide"),0) + coalesce(sum("Other Phone 1 Valide"),0) + coalesce(sum("Other Phone 1 Invalide"),0) + coalesce(sum("Other Phone 2 Valide"),0) + coalesce(sum("Other Phone 2 Invalide"),0) + coalesce(sum("Other Phone 3 Valide"),0) + coalesce(sum("Other Phone 3 Invalide"),0) + coalesce(sum("Other Phone 4 Valide"),0) + coalesce(sum("Other Phone 4 Invalide"),0) + coalesce(sum("Phone Search 1 Valide"),0) + coalesce(sum("Phone Search 1 Invalide"),0) + coalesce(sum("Phone Search 2 Valide"),0) + coalesce(sum("Phone Search 2 Invalide"),0) + coalesce(sum("Capital - < 100"),0) + coalesce(sum("Capital - 100-200"),0) + coalesce(sum("Capital - 200-300"),0) + coalesce(sum("Capital - 300-400"),0) + coalesce(sum("Capital - 400-500"),0) + coalesce(sum("Capital - 500-600"),0) + coalesce(sum("Capital - 600-700"),0) + coalesce(sum("Capital - 700-800"),0) + coalesce(sum("Capital - 800-900"),0) + coalesce(sum("Capital - 900-1000"),0) + coalesce(sum("Capital - 1000-1500"),0) + coalesce(sum("Capital - 1500-2500"),0) + coalesce(sum("Capital - > 2500"),0) + coalesce(sum("Délinquance – [0-3["),0) + coalesce(sum("Délinquance - [3-6["),0) + coalesce(sum("Délinquance - [6-9["),0) + coalesce(sum("Délinquance – [9-12["),0) + coalesce(sum("Délinquance – [12-24["),0) + coalesce(sum("Délinquance – [25-36["),0) + coalesce(sum("Délinquance – [36-84["),0) + coalesce(sum("Délinquance – 84 &+"),0) + coalesce(sum("DDN - Aucune Valeur"),0) + coalesce(sum("Région Saguenay"),0) + coalesce(sum("Région Outaouais"),0) + coalesce(sum("Région Ontario (qc)"),0) + coalesce(sum("Région Abitibi-Témiscamingue"),0) + coalesce(sum("Région Autres Provinces - États (qc)"),0) + coalesce(sum("Région Bas Saint-Laurent"),0) + coalesce(sum("Région Capitale-Nationale"),0) + coalesce(sum("Région Centre-du-Québec"),0) + coalesce(sum("Région Chaudière-Appalache"),0) + coalesce(sum("Région Côte-Nord"),0) + coalesce(sum("Région Estrie"),0) + coalesce(sum("Région Gaspésie"),0) + coalesce(sum("Région Lanaudière"),0) + coalesce(sum("Région Laurentides"),0) + coalesce(sum("Région Laval"),0) + coalesce(sum("Région Mauricie"),0) + coalesce(sum("Région Montérégie"),0) + coalesce(sum("Région Montréal"),0) + coalesce(sum("Région Nord-du-Québec"),0) + coalesce(sum("Aucune région (qc)"),0) as somme
FROM cte
group by id)
select var(somme) from cte2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。