Как запросить несколько сумм в несколько столбцов одного и того же запроса SQL в iReport? - PullRequest
1 голос
/ 22 сентября 2009

Это эффективно? Как это можно улучшить?

Я пытался получить данные из одного набора столбцов в два набора столбцов в соответствии с условием. Все методы, которые я пробовал, заканчивались несколькими строками.

Это очень похоже на этот другой вопрос , но немного сложнее.

Вот что я сделал: (Поскольку это для iReport / JasperReports, было бы очень сложно использовать несколько запросов.) По сути, мы хотим получить статистику по количеству живых дружелюбных и не дружелюбных солдат из двух таблиц для армейского военного игрового упражнения.

<code>
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

1 Ответ

1 голос
/ 23 сентября 2009

Это выглядит хорошо для меня. Никаких декартовых произведений и нарушений единого значения.

Применяются другие общие рекомендации по производительности. Получите отчет от оптимизатора, чтобы убедиться, что вы используете индексы правильно.

Подумайте, помогут ли составные индексы (например, армия: wargame_id, army_key).

Рассмотрим закрывающие индексы (например, солдат: army_key, dead, type_id, achievement).

...