我有一个SQL查询,我用它来返回客户在一周中的每一天(去年)记录的培训课程数。
SELECT COUNT(*) total_sessions
, DAYNAME(log_date) day_name
FROM programmes_results
WHERE log_date >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
AND log_date <= CURDATE()
AND client_id = 7171
GROUP
BY day_name
ORDER
BY FIELD(day_name, 'MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY')
我想绘制一张表格,显示这些值占总数的百分比,而不是每天的“计数”。但是,如果没有其他查询(我想避免),我有点不知道如何做到这一点。
有什么想法吗?
答案 0 :(得分:1)
使用派生表
select day_name, total_sessions, total_sessions / sum(total_sessions) * 100 percentage
from (
query from your question goes here
) temp
group by day_name, total_sessions
答案 1 :(得分:0)
您可以在客户端应用程序中添加每天的培训次数,以获得总计数。这样你绝对不会有第二个查询来获得总数。
使用查询中的with rollup修饰符获取最后一行返回的总数:
...GROUP BY day_name WITH ROLLUP ORDER BY ...
使用子查询返回每行中的总计数
SELECT ..., t.total_count
...FROM programmes_results INNER JOIN (SELECT COUNT(*) as total_count FROM programmes_results WHERE <same where criteria>) as t --NO join condition
...
这将对数据库产生最大的性能影响,但是,它使您能够获得每行的总数。