【问题标题】:How to get average from counting values?如何从计数值中获得平均值?
【发布时间】:2021-09-25 23:49:22
【问题描述】:

我正在使用 SQLite。

我需要确定每天的平均展示次数,其中展示次数 = person_id 的计数。

列:

  • person_id - 人的唯一标识符
  • 日期 - 向他们展示广告的日期
  • ad_id - 广告内容:ad_1_product1、ad_2_product2 或 ad_3_product3
  • 点击(真/假)- ​​点击广告
  • signed_up - (TRUE/FALSE) 创建了一个帐户
  • 已订阅 (TRUE/FALSE) - 开始付费订阅

我将 clicked, signed_up 和 subscribed 设置为 BOOLEAN,其余为文本。

我的代码:

SELECT AVG(impressions) AS avg_impressions 从 ( 选择 COUNT(person_id) 作为展示次数 FROM videoadcampaign 按日期分组 ) 日期;

我得到 1 行 1 列 avg_impression = 591

我无法按日期细分平均值。日期为 2021-04-27 格式,日期总数为 8。

结果

预料之中,忽略列名,只是给你看

非常感谢任何帮助。

【问题讨论】:

  • 请在预期输出中添加示例数据。
  • 子查询返回每天的行数。首先执行这个子查询并检查结果。可以吗?如果是,那么这些结果的平均值也应该没问题。或者是你想要的其他东西。
  • 添加了一些图片来展示

标签: sql sqlite count percentage


【解决方案1】:

如果您想要每天的行数百分比,则可以通过将每天的计数除以总行数来实现。

带有SUM()窗口功能:

SELECT date, 1.0 * COUNT(*) / SUM(COUNT(*)) OVER () AS avg_impressions
FROM videoadcampaign 
GROUP BY date

或者,使用子查询:

SELECT date, 1.0 * COUNT(*) / (SELECT COUNT(*) FROM videoadcampaign) AS avg_impressions
FROM videoadcampaign 
GROUP BY date

我假设person_id 列不可为空,因此您可以使用COUNT(*) 代替COUNT(person_id)

【讨论】:

    【解决方案2】:

    每天的平均展示次数是总展示次数除以人数。不需要子查询:

    SELECT COUNT(*) * 1.0 / COUNT(DISTINCT person_id) AS avg_impressions
    FROM videoadcampaign;
    

    【讨论】:

    • 您的代码中的impressions 是什么?表中没有这样的列。
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    相关资源
    最近更新 更多