【问题标题】:SQL - Sum of NAsSQL - NA 的总和
【发布时间】:2023-03-03 00:02:01
【问题描述】:

sample data我正在处理奥运会数据 (https://www.kaggle.com/heesoo37/120-years-of-olympic-history-athletes-and-results)。我尝试使用 SQLite 获取某些列的 NA 总和。列的NA总和显示为0(零)。code output代码如下,请帮助。谢谢

SELECT
  Sex,
  SUM(CASE WHEN ('Age' = 'NA') THEN (1.0) ELSE (0.0) END) AS NA_age,
  SUM(CASE WHEN ('Height' = 'NA') THEN (1.0) ELSE (0.0) END) AS NA_height,
  SUM(CASE WHEN ('Weight' = 'NA') THEN (1.0) ELSE (0.0) END) AS NA_weight,
  COUNT(*)
FROM olymp
GROUP BY Sex

【问题讨论】:

    标签: sql sqlite count pivot


    【解决方案1】:

    您不能在列名周围使用单引号。
    单引号用于字符串文字。
    改成这样:

    SELECT
      Sex,
      SUM(CASE WHEN (Age = 'NA') THEN 1 ELSE 0 END) AS NA_age,
      SUM(CASE WHEN (Height = 'NA') THEN 1 ELSE 0 END) AS NA_height,
      SUM(CASE WHEN (Weight = 'NA') THEN 1 ELSE 0 END) AS NA_weight,
      COUNT(*)
    FROM olymp
    GROUP BY Sex
    

    但在 SQLite 中,不需要 CASE 表达式。
    使用SUM()中的布尔表达式:

    SELECT
      Sex,
      SUM(Age = 'NA') AS NA_age,
      SUM(Height = 'NA') AS NA_height,
      SUM(Weight = 'NA') AS NA_weight,
      COUNT(*)
    FROM olymp
    GROUP BY Sex
    

    【讨论】:

    • 感谢 forpas,但我仍然使用您建议的两个代码为这些列获得相同的 0(零)输出。有什么问题?
    • 发布您的数据的示例数据。
    • @IntrepidNutrepidation 也许你的意思是Age is null 而不是Age = 'NA'
    • ID 姓名 性别 年龄 身高 体重 球队 NOC 比赛年份 赛季 城市 9967 Pave~ M 28 172 70 Czec~ TCH 1992~ 1992 Winter Albe~ 111428 Helg~ F 20 171 61 Arge~ ARG 1968~ 1968 Winter Gren~ 127942 Paul~ M 29 NA 109 Germ~ GER 1936~ 1936 Summer Berl~ 37121 Juli~ M 18 NA NA Germ~ GER 1900~ 1900 夏季巴黎
    • @GMB,缺失值不为空。我在 R studio 中加载 excel 文件并使用 sqlite
    猜你喜欢
    • 2016-02-21
    • 2018-04-13
    • 1970-01-01
    • 2020-04-04
    • 1970-01-01
    • 2020-12-23
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多