【问题标题】:Count occurrence and percentage of this occurrence计数出现次数和出现次数的百分比
【发布时间】:2021-09-29 12:21:09
【问题描述】:

我有一个表(“gsheet.table”),其中一列(“column”)包含“是”或“否”。

    • 是的
    • 没有
    • 是的
    • 没有

我想要这张表中包含两列的图表。

一个计数“是”的出现总数。 第二个显示“是”相对于列中总行数的百分比。

身份证号码百分比

  • 1 * 2 * 50% (我不知道如何格式化,但这应该是一个三列表格(预期结果))

我对 SQL 非常陌生,并且很难做到这一点。你能帮帮我吗?

【问题讨论】:

  • 您应该添加您的示例数据和您的预期结果。

标签: sql count percentage


【解决方案1】:

在 CASE WHEN 条件上使用聚合函数 SUM() 可能会在这里解决问题:

SELECT
  SUM(CASE WHEN column = "Yes" THEN 1 ELSE 0 END) AS yes_,
  ROUND(SUM(CASE WHEN column = "Yes" THEN 1 ELSE 0 END) * 1.0 / COUNT(column), 2) AS yes_percentage
FROM
  gsheet.table

您想将所有“是”相加为 1,然后在第二列中,我们只需将 1 的总和除以该列中的总行数(是/(是+否))。

希望对您有所帮助!

【讨论】:

  • 感谢您的回答!我复制了你的代码,我得到 33 为 yes_(听起来不错),但我得到 0 为 yes_percentage。这可能与我有空值这一事实有关。我最后添加了一个“WHERE 列不为空”,但这并没有解决它。有什么想法吗?
  • 没有更多提示,我无法提供帮助,因为这种方法对我有用。你能分享你的数据样本吗?您使用的是什么数据库管理系统?
  • 尝试SUM(CASE WHEN column = "Yes" THEN 1 ELSE 0 END) * 1.0 / COUNT(column) AS yes_percentage 注意decimal 常量1.0 否则大多数DBMS 将使用整数运算,因此33/100 = 0
  • Serg,你的想法修复了它,但使用 *100.0 而不是 *1.0 SUM(CASE WHEN column = "Yes" THEN 1 ELSE 0 END) * 100.0 / COUNT(column) AS yes_percentage 我想知道如何将其四舍五入到小数点后一位?
  • 您可以在整列顶部使用函数 ROUND()。我会相应地编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多