计算我的查询中的人数

Posted

技术标签:

【中文标题】计算我的查询中的人数【英文标题】:Counting number of people in my query 【发布时间】:2016-08-04 09:26:29 【问题描述】:

我有一个查询,可以找到运动员在比赛等方面的最佳时间。我的查询基本上过滤掉了除个人最佳时间之外的所有比赛。

我想显示他们在比赛中比其他人完成的比赛的百分比

我不知道如何做到这一点,所以希望有人能提供帮助,这是我的代码:

SELECT tblSourceData.Athlete, Max(tblSourceData.Swim) AS MaxOfSwim, Max(tblSourceData.Bike) AS MaxOfBike, Max(tblSourceData.Run) AS MaxOfRun, Count(tblSourceData.Athlete) AS EventsCompleted
    FROM tblSourceData
    WHERE (((tblSourceData.Gender)="f"))
    GROUP BY tblSourceData.Athlete
    HAVING (((Count(tblSourceData.Athlete))>=5));

我表中的行是:

Athlete
Swim
Run
Bike
Date
Gender

--------从评论中添加了更多信息-----------

我目前的查询显示如下示例:

Name      Swim      Bike       Run       CompletedEvents       %
Dave      43:22    11:23      32:34            46
John      43:23    31:24      11:43            12

我想知道完成比赛的所有运动员的平均百分比

提前谢谢你

【问题讨论】:

什么是种族?你桌子上的每一行都是一场比赛?您必须提供更多信息,以便我们为您提供帮助 “他们在比赛中完成的比赛的百分比超过了其他人”。你也能提供更多信息吗??? 请添加一些示例数据和预期输出 “我想知道平均百分比” 那么如果戴夫游泳的最佳时间是 43:22,而平均时间是 41:15,你想知道百分比是多少? 抱歉,我不擅长解释 - 我想计算已完成事件的百分比和查询中列出的运动员人数。因此,在我的示例中,Dave 完成了 46 个事件,而查询中只有两个人。希望这是有道理的 【参考方案1】:

试试这个:

SELECT tblSourceData.Athlete,
(SELECT Max(tblSourceData.Swim) from tblSourceData) AS MaxOfSwim, 
(SELECT Max(tblSourceData.Bike) from tblSourceData) AS MaxOfBike,
(SELECT Max(tblSourceData.Run) from tblSourceData) AS MaxOfRun,
Count(tblSourceData.Athlete) AS EventsCompleted
FROM tblSourceData
WHERE (((tblSourceData.Gender)="f"))
GROUP BY tblSourceData.Athlete
HAVING (((Count(tblSourceData.Athlete))>=5));  

希望对你有帮助!

【讨论】:

不会增加负载和执行时间吗?【参考方案2】:

如果您想要的是每个运动员完成的比赛在所有比赛中的百分比,您只需要使用SUM() 来总结所有完成的比赛,然后计算每个用户的百分比。我无法测试它,但类似这样应该工作:

SELECT tblSourceData.Athlete as Athlete,
       Max(tblSourceData.Swim) AS MaxOfSwim,
       Max(tblSourceData.Bike) AS MaxOfBike, 
       Max(tblSourceData.Run) AS MaxOfRun,
       Count(tblSourceData.Athlete) AS EventsCompleted,
       ROUND((100*Count(tblSourceData.Athlete)/(SELECT SUM(b.eventsCompleted) FROM  (      
           SELECT COUNT(tblSourceData.Athlete) AS EventsCompleted FROM tblSourceData
           WHERE tblSourceData.Gender="f"
           GROUP BY tblSourceData.Athlete
           HAVING Count(tblSourceData.Athlete)>=5
       ) AS b)),2)  AS `percentage` 
       FROM tblSourceData
       WHERE tblSourceData.Gender="f"
       GROUP BY tblSourceData.Athlete
       HAVING Count(tblSourceData.Athlete)>=5

【讨论】:

@david 我更新了我的查询现在应该没问题了。你可以再试一次

以上是关于计算我的查询中的人数的主要内容,如果未能解决你的问题,请参考以下文章

如何计算使用 Cloud Firebase 在 Swift UI 中选择一个选项的人数?

计算组织中每个员工的直接下属人数(聚合)

SQL:查询每门课程的课程名、选课学生姓名及其学号,选课人数

sql计算机系的平均成绩为多少?

有啥有效的方法来计算大数据表列中的二进制值?

mysql查询部门人数大于所有部门平均人数的部门