Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Наибольшее из 2-х полей


Автор: Beltar 15.6.2009, 12:39
Есть таблица, довольно большая, но сейчас интересуют только 4 поля: RGME_NUM, Prog_NUM, RKS1, RKS2. Требуется найти распределение среднего значения RKS по RGME_NUM и Prog_NUM. При этом из RKS1 и RKS2 выбирается наибольшее.
Другими словами, при наличии ф-ии вроде int maximum(int x1,x2) все сводилось бы к:

Select RGME_NUM, Prog_NUM Avg(maximum(RKS1,RKS2)) From RGME_Data
Group by RGME_NUM, Prog_NUM

Но таковой я не обнаружил. В принципе можно нарисовать свою dll на Delphi и скормить ее Интербейзу, но хотелось бы сделать все средствами SQL.

Вот такой запрос по идее должен работать

Код

Select  "RGME_NUM", "PROG_NUM",
(Select Sum(RKS1) From  "RGMEDATA" C Where C.RKS1>=C.RKS2 and
  C."RGME_NUM"= RGMEDATA."RGME_NUM" and  C."PROG_NUM"= RGMEDATA."PROG_NUM") as SRKS1,
(Select Sum(RKS2) From  "RGMEDATA" C Where C.RKS2>C.RKS1 and
  C."RGME_NUM"= RGMEDATA."RGME_NUM" and  C."PROG_NUM"= RGMEDATA."PROG_NUM") as SRKS2,
Count(*) as CRKS From  "RGMEDATA"
Group by  "RGME_NUM", "PROG_NUM"


Но на моей небольшой тестовой базе в 200000+ записей он не смог отработать и за час.

Что еще можно сделать?

Автор: Zloxa 15.6.2009, 12:42
Цитата(Beltar @  15.6.2009,  12:39 Найти цитируемый пост)
Но таковой я не обнаружил

Код

avg(case when RKS1>RKS2 then RKS1 else RKS2 end)

Автор: Beltar 15.6.2009, 13:56
+1
Вопрос закрыт.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)