【发布时间】:2017-09-02 13:39:13
【问题描述】:
我有一个名为会话的 MySQL 表,该表包含由 user_id 参加的会话的出席人数和日期。我可以通过使用以下语法获得平均出勤率,该语法基本上将出席的总会话数除以可能的总会话数并将其乘以 100。这给出了给定日期范围内的整个平均值。
SELECT (
(SELECT count(*) as total FROM sessions ap JOIN session_codes codes USING (code_id) WHERE ap.session_year=2017 AND (ap.session_date BETWEEN '2017-01-15' AND '2017-05-10') AND codes.status>=1) /
(SELECT count(*) as total_sessions FROM sessions WHERE (session_date BETWEEN '2017-01-15' AND '2017-05-10') AND session_year=2017)
) * 100 AS percentage
但是,我想做的是按 user_id 对结果进行分组,并为每个 user_id 运行某种子查询,看起来像上面,但也有一个子句来说明 user_id 是循环中的那个。这样我就可以得到单个用户的百分比,结果看起来像这样:
user_id attendance
1211 89
3344 96
有谁知道如何做到这一点?
我在会话表上运行了一个解释语法,这就是我的会话表的外观:
user_id bigint(20) NO PRI NULL
session_year year(4) NO PRI NULL
session_date date NO PRI NULL
am_pm bigint(20) NO PRI NULL
code_id bigint(20) YES NULL
user varchar(50) YES NULL
【问题讨论】:
-
能贴出相关的表结构吗?有些人——包括我在内——对如何在没有它的情况下开始解决你的问题感到困扰......
-
同意@Bagus Tesa。共享表架构
-
@Bagus Tesa 我如何发布表结构?它是一个包含 session_date、user_id、am_pm、code_id、session_year、user 的基本表。前 3 个字段必须是唯一的
-
嗨@Ahmed,您可以将Entity Relaionship Diagram 放入ascii 样式(就像您将sql 查询放在那里一样),或者截取您的sql 表结构.. 使用
explain <table_name>实例.. -
@Bagus Tesa 我在桌子上运行了一个解释语法并用结果更新了帖子。