【问题标题】:Trying to divide 2 count in SQL试图在 SQL 中除以 2 个计数
【发布时间】:2021-12-25 13:09:09
【问题描述】:

在过去的 3 个小时里,我一直被一个查询卡住。 我必须将以下两个计数分开:

--Count the number of event hosted by each friend
SELECT friend_ID, COUNT(*) as TotalNumberOfEventHosted
FROM EVENT_
GROUP BY friend_id;

--Count the number of confirmed event
SELECT friend_ID, COUNT(*) as NbrOfConfirmedEvent
FROM EVENT_
NATURAL JOIN PROPOSED_DATE
WHERE IS_CONFIRMED = TRUE
GROUP BY FRIEND_ID ;

以下是各自的截图:

但是,我无法进行除法,因为我收到以下错误:子查询返回超过 1 行。

最后的目标是获得每个组织者的活动接受率(经过验证的活动在总数中的数量)。因此,将 NbrOfConfirmedEvent 除以 TotalNumberOfEventHosted。

而且我无法将这两个查询结合起来。有人有想法吗?

【问题讨论】:

  • 检查是否可以使用COUNT(DISTINCT col), SUM(IS_CONFIRMED = TRUE)
  • 以文本格式而不是图像发布两个表格的示例数据和预期结果,以阐明您想要什么。
  • 对不起@forpas 目标是获得每个组织者的活动接受率(总数中经过验证的活动的数量)。我已经编辑了主题
  • Edit问题并提供minimal reproducible example,即涉及的表或其他对象的CREATE语句(粘贴文本,不要使用图像,不要链接到外部站点),INSERT 用于示例数据的语句 (dito) 以及带有表格文本格式的示例数据的所需结果。

标签: mysql sql select count mysql-workbench


【解决方案1】:

尝试将这 2 个查询放在 CTE 中,将它们连接到您的主查询中并在那里进行除法

【讨论】:

    【解决方案2】:

    你想做什么?有一个包含三列的表,一列是friend_ID,另一列是托管事件,第三列是确认事件?如果是这样,您正在尝试添加一个带有 CountIF() 或 SumIF() 的列,检查事件是否已确认

    【讨论】:

    • 非常感谢。我会看看。最后的目标是获得每个组织者 (friend_ID) 的活动接受率(已验证的活动总数)
    【解决方案3】:
    you could try using a left join on the two subquery 
    
        select a.friend_ID, a.TotalNumberOfEventHosted/b.NbrOfConfirmedEvent
        from  ( 
        SELECT friend_ID, COUNT(*) as TotalNumberOfEventHosted
        FROM EVENT_
        GROUP BY friend_id) a 
        left join ( 
            SELECT friend_ID, COUNT(*) as NbrOfConfirmedEvent
            FROM EVENT_
            NATURAL JOIN PROPOSED_DATE
            WHERE IS_CONFIRMED = TRUE
            GROUP BY FRIEND_ID 
        ) b on a.friend_ID = b.friend_ID;
    

    【讨论】:

    • 非常感谢。我很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多