1

这有效率吗?如何改进?

我试图根据条件从一组列中获取数据到两组列中。我尝试的所有方法都以多行结束。

这与其他问题非常相似,但更复杂一些。

这就是我所做的:(因为这是针对 iReport/JasperReports 的,所以使用多个查询会很麻烦。)基本上,我们希望从军队战争游戏的两个表中获取生活友好和非友好士兵的统计数据锻炼。


SELECT 
   army.army_key UNIT_NUM,
   COUNT( case when soldier.type_id = 1 then 1 else NULL end ) AS friendCount, 
   SUM( case when soldier.type_id = 1 then soldier.achievement else 0 end ) AS friendAmount, 
   COUNT( case when soldier.type_id = 2 then 1 else NULL end ) AS enemyCount, 
   SUM( case when soldier.type_id = 2 then soldier.achievement else 0 end ) AS enemyAmount
   FROM soldier, army
   WHERE soldier.army_key = army.army_key 
      AND army.wargame_id = $P{GAME_ID} 
      AND soldier.dead is null 
   GROUP BY army.army_key
   ORDER BY UNIT_NUM ASC

4

1 回答 1

1

我觉得很好。没有笛卡尔积,也没有违反单值规则。

其他通用性能建议适用。从优化器获取报告以确保您正确使用索引。

考虑复合索引是否会有所帮助(例如军队:wargame_idarmy_key)。

考虑覆盖索引(例如,士兵:army_key、、、、)。deadtype_idachievement

于 2009-09-22T20:16:48.680 回答