Sqlite SQL-对从查询中的聚合函数获得的结果执行附加数学计算

Sqlite SQL-对从查询中的聚合函数获得的结果执行附加数学计算,sqlite,subquery,aggregate-functions,Sqlite,Subquery,Aggregate Functions,我对编写SQL查询相当陌生。我使用了一个子查询,以便获得应用于两个不同表的聚合函数的结果。此外,我想获得这两个聚合函数的结果之间的比率。换句话说,聚合函数1的结果/聚合函数2的结果 Id 1 2 3 4 5 6 7 输入: 表用户 Id

我对编写SQL查询相当陌生。我使用了一个子查询,以便获得应用于两个不同表的聚合函数的结果。此外,我想获得这两个聚合函数的结果之间的比率。换句话说,聚合函数1的结果/聚合函数2的结果

Id                             
1                                 
2                                 
3  
4  
5   
6  
7 
输入: 表用户

Id                             
1                                 
2                                 
3  
4  
5   
6  
7 
表事件

Id                             
1                                 
2                                 
3  
4  
5   
6  
7 
User_Id         Event_Name  
1            View_User_Profile  
1            View_User_Activity  
1            View_User_Profile  
2            View_User_Activity  
3            View_User_Activity  
4            View_User_Profile  
5            View_User_Activity  
7            View_User_Activity 
这是我目前的代码:

Id                             
1                                 
2                                 
3  
4  
5   
6  
7 
SELECT COUNT(*) AS Number_of_Users, 
    (SELECT COUNT(DISTINCT U.Id) AS Number_of_Users_Viewed_Profile
    FROM dsv1069.Users U Left Join dsv1069.Events E
    ON U.Id = E.user_id
    WHERE E.Event_Name = 'view_user_profile') AS Number_of_Users_Viewed_Profile
FROM dsv1069.Users
结果:

Id                             
1                                 
2                                 
3  
4  
5   
6  
7 
Number_of_Users: 7
Number_of_Users_Viewed_Profile: 2
预期产出:

Id                             
1                                 
2                                 
3  
4  
5   
6  
7 
Number_of_Users: 7
Number_of_Users_Viewed_Profile: 2
PERCENT OF USERS VIEWED PROFILE: 28.6%


问题:到目前为止,我的代码没有做的是计算比率2/7=28.6%
我在聚合函数上做了很多搜索,但找不到关于如何将这些函数的结果作为查询的一部分的任何信息。谢谢你的帮助

我相信您可以获得列
用户数\u查看\u配置文件
,而无需加入:

Id                             
1                                 
2                                 
3  
4  
5   
6  
7 
SELECT COUNT(DISTINCT user_id) 
FROM dsv1069.Events 
WHERE Event_Name = 'view_user_profile'
这相当于您的查询:

Id                             
1                                 
2                                 
3  
4  
5   
6  
7 
SELECT 
  COUNT(*) AS Number_of_Users, 
  (
    SELECT COUNT(DISTINCT user_id) 
    FROM dsv1069.Events 
    WHERE Event_Name = 'View_User_Profile'
  ) AS Number_of_Users_Viewed_Profile 
FROM dsv1069.Users
您可以使用CTE获取
比率
列:

Id                             
1                                 
2                                 
3  
4  
5   
6  
7 
WITH cte AS (
  SELECT 
    COUNT(*) AS Number_of_Users, 
    (
      SELECT COUNT(DISTINCT user_id) 
      FROM Events 
      WHERE Event_Name = 'View_User_Profile'
    ) AS Number_of_Users_Viewed_Profile 
  FROM Users
)
SELECT *, ROUND(100.0 * Number_of_Users_Viewed_Profile / Number_of_Users, 1) AS ratio
FROM cte
请参阅。
或没有CTE:

Id                             
1                                 
2                                 
3  
4  
5   
6  
7 
SELECT
  t1.Number_of_Users,
  t2.Number_of_Users_Viewed_Profile,
  ROUND(100.0 * t2.Number_of_Users_Viewed_Profile / t1.Number_of_Users, 1) AS ratio
FROM (SELECT COUNT(*) AS Number_of_Users FROM Users) AS t1
CROSS JOIN (
  SELECT COUNT(DISTINCT user_id) AS Number_of_Users_Viewed_Profile 
  FROM Events 
  WHERE Event_Name = 'View_User_Profile'
) AS t2 
请参阅。
结果:

Id                             
1                                 
2                                 
3  
4  
5   
6  
7 

请添加输入和预期输出。