Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Умножение в запросе / 22 сообщений из 22, страница 1 из 1
28.08.2002, 17:50:35
    #32046619
Balu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
Много Уважаеммый ALL , не подскажешь ли как составить запрос следующего содержания
Есть таблица
ID1 , ID2 Int; Pole Float
Нужен запрос вида (типа):
SELECT ID1 , Умножение ( Pole )
GROUP BY ID1
Или это невозможно принципиально???
...
Рейтинг: 0 / 0
28.08.2002, 17:56:12
    #32046621
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
что означает Умножение(Pole) ???
...
Рейтинг: 0 / 0
28.08.2002, 18:11:13
    #32046626
Balu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
ID1|ID2|Pole
------------
1 | 1 | 2.5
1 | 2 | 1.2
2 | 1 | 3.5
3 | 1 | 1.7
3 | 2 | 1.8
3 | 3 | 1.3
-------------
Результат:
------------
ID | Результат
------------
1 | 3.75
2 | 3.5
3 | 3.978
...
Рейтинг: 0 / 0
28.08.2002, 18:23:13
    #32046629
MichaelGK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
Balu, если в примере набора данных во второй строке столбца Pole вы ошиблись и поставили 1.2 вместо 1.5, то можно подумать... А если это не так, то не понятно, что нужно получить.
...
Рейтинг: 0 / 0
28.08.2002, 18:27:24
    #32046630
Balu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
To MichaelGK
Да согласен ошибочка вышла должно быть:
ID1|ID2|Pole
------------
1 | 1 | 2.5
1 | 2 | 1.5
2 | 1 | 3.5
3 | 1 | 1.7
3 | 2 | 1.8
3 | 3 | 1.3
-------------
Результат:
------------
ID | Результат
------------
1 | 3.75
2 | 3.5
3 | 3.978
---------------------------------
Смысл получить следующее:
ID = 1, Результат = 2,5*1,5 = 3,75
ID = 2, Результат = 3,5
ID = 3, Результат = 1,7*1,8*1,3 = 3,978
...
Рейтинг: 0 / 0
28.08.2002, 18:34:14
    #32046635
Hermitap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
Это не умножение, это сумма

ваш запрос, тольк вместо слова умножение подставить Sum(Pole) as Результат
...
Рейтинг: 0 / 0
28.08.2002, 18:35:56
    #32046636
Hermitap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
пардон, ошибся...
невнимательно прочел....
...
Рейтинг: 0 / 0
28.08.2002, 18:52:46
    #32046641
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
ИМХО так (верно для MS SQL2000 ):
Код: 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.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
create table dbo.testmult (id int, value numeric( 8 , 2 ))
go
create function dbo.mult  (@id int)
returns numeric( 8 , 2 )
as
begin
   declare @mult numeric( 8 , 2 )
   if exists( select id from testmult where id = @id ) begin
        set @mult =  1 . 0 
        declare @value numeric( 8 , 2 )
        declare mult_cursor cursor for
            ( select value from testmult where id = @id )
        open mult_cursor
        fetch next from mult_cursor into @value
        while @@FETCH_STATUS =  0  begin
            set @mult = @mult * @value
            fetch next from mult_cursor into @value
        end
        close mult_cursor
        deallocate mult_cursor
    end
    else
        set @mult =  0 . 0 

    return(@mult)
end
go
insert testmult (id, value)
    values(  1 ,  2 . 5  )
insert testmult (id, value)
    values( 1  ,  1 . 5  )
insert testmult (id, value)
    values( 2  ,  3 . 5  )
insert testmult (id, value)
    values( 3  ,  1 . 7  )
insert testmult (id, value)
    values( 3  ,  1 . 8  )
insert testmult (id, value)
    values( 3  ,  1 . 3  )
go
select distinct id, dbo.mult(id) as mult
    from testmult 
    order by  1 
go

 --- results ---
 
id          mult       
 ----------- ---------- 
 
 1 . 00          3 . 75 
 2 . 00          3 . 50 
 3 . 00          3 . 98 

( 3  row(s) affected)


...
Рейтинг: 0 / 0
28.08.2002, 18:57:23
    #32046642
Balu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
Спасибо Jimmy
Но так и я сделал, тормоза жуткие записей порядка 15 миллионов :(
Хотелось бы ускорить вычисление.
Как я понимаю на стандартном T-SQL это невозможно ;(
...
Рейтинг: 0 / 0
28.08.2002, 19:13:42
    #32046646
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
я не проверял, но может подойдет такой вариант или некий подобный
Код: plaintext
1.
2.
3.
SELECT ID, avg(Pole) * count(Pole)
FROM table
GROUP BY ID
...
Рейтинг: 0 / 0
28.08.2002, 19:32:17
    #32046648
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
Если в примере Jimmy изменить код функции:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
ALTER FUNCTION dbo.mult(@id int)
RETURNS numeric( 8 , 2 )
AS
BEGIN
declare @result numeric( 8 , 2 )
SET @result =  1 
SELECT @result = @result * value FROM testmult WHERE id = @id
RETURN @result
END
...
Рейтинг: 0 / 0
28.08.2002, 19:32:40
    #32046649
Balu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
To AAron Ценю участие, но среднее арифметическое ??? помоему это слишком.
Ради интереса, результат по тестовому примеру:
id | mult
-----------
1 | 4.00
2 | 3.50
3 | 4.80
Причем с точки зрения математики (среднеарифметического) ВСЁ верно :)
...
Рейтинг: 0 / 0
28.08.2002, 19:34:35
    #32046650
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
Глупо уточнять, но тем не менее - индекс соответствующий имеется?
...
Рейтинг: 0 / 0
28.08.2002, 19:37:22
    #32046651
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
2 Balu
я же написал, что не проверял :)
все... понял... тяжелый день был :))

пр умножении получится просто сумма :((
...
Рейтинг: 0 / 0
28.08.2002, 19:54:51
    #32046652
Balu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
To jimmers Спасибо, интересная идея .
Индекс построить не могу, в виду того, что это View собраный из 5-ти таблиц, как результат - запрос выполняется в 6-ть раз медленее чем с функцией работающей через кусрсор, я сам не понимаю причины :((
...
Рейтинг: 0 / 0
28.08.2002, 20:05:34
    #32046654
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
Ну так и надо писать VIEW, а не "Есть таблица"...
Кроме того, нельзя ли узнать - как именно формируется Представление?
...
Рейтинг: 0 / 0
28.08.2002, 20:12:52
    #32046655
Balu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
Грубо говоря так:
SELECT Field1, ..., 1 ,.... FROM Table1 WHERE ....
UNION
SELECT Field1, .., 0.1,.. FROM Table2 WHERE ....
UNION
SELECT Field1, .., Живое поле из базы ,.. FROM Table3 WHERE ....
Потом это View участвует в другом View типа
SELECT ..... FROM .... LEFT JOIN .....
И только ко второму View я присоединяюсь.

Причина таких построений - я на сервер перенес математику, уж больно долго на клиенте она обрабатывается :((
...
Рейтинг: 0 / 0
29.08.2002, 05:33:14
    #32046671
svz58
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
Из школьного курса -- Сумма логарифмов = Логарифму от произведения поэтому
create table dbo.testmult (id int, value numeric(8,2))
go
insert testmult (id, value)
values( 1, 2.5 )
insert testmult (id, value)
values(1 , 1.5 )
insert testmult (id, value)
values(2 , 3.5 )
insert testmult (id, value)
values(3 , 1.7 )
insert testmult (id, value)
values(3 , 1.8 )
insert testmult (id, value)
values(3 , 1.3 )
go
select id,Cast(exp(sum(log(value))) as decimal(8,3)) from testmult group by id
id
----------- ----------
1 3.750
2 3.500
3 3.978

(3 row(s) affected)
...
Рейтинг: 0 / 0
29.08.2002, 10:10:45
    #32046713
MichaelGK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
svz58 - 5 баллов.
...
Рейтинг: 0 / 0
29.08.2002, 12:00:21
    #32046764
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
2svz58
Круто. Школьный курс мы уже забыли...

А я только так предложу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create table #tmp (ID1 Int, Pole Float)

insert #tmp
select distinct ID1,  0 
from MyTable

update #tmp
set Pole = #tmp.Pole * m.Pole
from MyTable m
where #tmp.ID1 = m.ID1

select ID1, Pole from #tmp
...
Рейтинг: 0 / 0
29.08.2002, 12:20:20
    #32046773
Jimmy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
2 jimmers
Ваша функция - элегантнее.

2 svz58
Просто супер.
...
Рейтинг: 0 / 0
29.08.2002, 12:43:48
    #32046784
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Умножение в запросе
Кстати не забывайте, что нельзя брать логарифм нуля и отрицательных чисел тоже.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Умножение в запросе / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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