powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / запрос с сортировкой.
5 сообщений из 5, страница 1 из 1
запрос с сортировкой.
    #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
запрос с сортировкой.
    #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
запрос с сортировкой.
    #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
запрос с сортировкой.
    #32442643
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Тольк причем тут проектирование БД?
...
Рейтинг: 0 / 0
запрос с сортировкой.
    #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]