【发布时间】:2014-10-31 23:42:03
【问题描述】:
在我的 J2EE Web 应用程序中,我需要生成一个条形图,表示系统中users 与特定alerts 的百分比。 (编辑 - 我忘了提,该图只处理与每个用户的第一个 situation 相关联的警报,因此是 min(date) )。
我的数据库架构的简化(但结构相似)版本如下:
users { id, name }
situations { id, user_id, date }
alerts { id, situation_id, alertA, alertB }
其中users 到 situations 是 1-n,situations 到 alerts 是 1-1。
我省略了数据类型,但警报(alertA 和 B)是布尔值。在我的实际案例中,有很多这样的警报(30-ish)。
到目前为止,这是我想出的:
select sum(alerts.alertA), sum(alerts.alertB)
form alerts, (
select id, min(date)
from situations
group by user_id) as situations
where situations.id = alerts.situation_id;
然后将这些总和除以
select count(users.id) from users;
这似乎远非理想。
您对如何改进查询的建议/建议将不胜感激(或者我可能需要重新考虑我的数据库架构)...
谢谢,
安东尼
PS。我还考虑在更新警报表时使用触发器来刷新特定于图表的表,但我想这是不同查询的主题(如果结果有问题)。
【问题讨论】:
标签: mysql sql performance optimization