我有一个名为sessions的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
答案 0 :(得分:1)
您可以使用GROUP BY
,例如:
SELECT user_id, 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
GROUP BY user_id
这将为您提供用户出席。您现在可以将其除以总计以获得百分比,例如:
SELECT a.user_id, a.total / (SELECT count(*) as total_sessions FROM sessions WHERE (session_date BETWEEN '2017-01-15' AND '2017-05-10') AND session_year=2017 and user_id = a.user_id)
FROM (
SELECT user_id, 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
GROUP BY user_id
) a;