Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / запрос с сортировкой. / 5 сообщений из 5, страница 1 из 1
15.03.2004, 12:37
    #32441702
Шанхай
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос с сортировкой.
итак: есть три колонки (5 колонок - не существенно), данные
11 17 23
24 12 15
13 28 10
сумма везде одна и та-же. нужно: отсортировать по минимальному результату. например:
13 28 10 (минимальный 10)
11 17 23 (минимальный 11)
24 12 15 (минимальный 12)
в sql-запросе
...
Рейтинг: 0 / 0
15.03.2004, 12:52
    #32441738
LexusR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос с сортировкой.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
select  11  as f1,  17  as f2,  23  as f3 into #temp 
union all select  24 ,  12 ,  15  
union all select  13 ,  28 ,  10  

select f1,f2,f3 from #temp  t1 
order by (select min(f) from (select f1 as f union all select f2 union all select f3     from #temp where f1=t1.f1 and f2=t1.f2 and f3=t1.f3) t2)

drop table #temp
...
Рейтинг: 0 / 0
15.03.2004, 16:02
    #32442146
Дмитрий Валуев
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос с сортировкой.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select  11  as f1,  17  as f2,  23  as f3 into #temp 
union all select  24 ,  12 ,  15  
union all select  13 ,  28 ,  10  

select f1,f2,f3 from #temp  t1 
order by case when f1<f2 then 
		case when f1<f3 
		then f1
		else case when f2<f3 then f2 else f3 end
		end
	else  --f1>f2
 
		case when f2<f3 
		then f2
		else case when f1<f3 then f1 else f3 end
		end
	end

drop table #temp
...
Рейтинг: 0 / 0
15.03.2004, 22:51
    #32442643
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос с сортировкой.
Тольк причем тут проектирование БД?
...
Рейтинг: 0 / 0
16.03.2004, 00:28
    #32442665
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос с сортировкой.
Если делается что то посложнее, чем сортировка 3 записей, то могу предложить решение на WatcomSQL, который позволяет в таких случаях оптимизировать выполнение запросов, посредством построения индексов на вычисляемые поля:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
BEGIN
  // Организовали времянку
  DECLARE LOCAL TEMPORARY TABLE #TestTable (
    f1 int,
    f2 int,
    f3 int,
    MinF int COMPUTE (Lesser(Lesser(f1, f2), f3))
  ) NOT TRANSACTIONAL;

  // Сделали индекс по вычисляемому полю
  CREATE INDEX idx_MinValue ON #TestTable ( MinF ASC );

  // Заполнили данные
  INSERT INTO #TestTable (f1, f2, f3)
    SELECT  11 ,  17 ,  23 
    INTO #TestTable
    UNION ALL
    SELECT  24 ,  12 ,  15  
    UNION ALL 
    SELECT  13 ,  28 ,  10 ;

  // Вернули требуемое, отсортировав по индексу idx_MinValue
  SELECT f1, f2, f3
  FROM #TestTable
  ORDER BY MinF;

  // Получили самое минимальное число, используя индекс idx_MinValue
  SELECT Min(MinF) AS MinF
  FROM #TestTable;

  // Еще раз получили самое минимальное число, 
  // используя индекс idx_MinValue, хотя поле MinF явно и не задано
  SELECT Min(Lesser(Lesser(f1, f2), f3)) AS MinF
  FROM #TestTable;

END

Работает как часы, правда на каких принципах они строят индексы по вычисляемым полям, в которых можно использовать в том числе и собственные UDF, я до сих пор не догадался :)

P.S. Кстати было бы интересно узнать, для какой все таки СУБД уважаемый Шанхай хотел увидеть решение своей задачи. Или у него был чисто академический интерес ? :)
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / запрос с сортировкой. / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]