powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Умножение в запросе
22 сообщений из 22, страница 1 из 1
Умножение в запросе
    #32046619
Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Много Уважаеммый ALL , не подскажешь ли как составить запрос следующего содержания
Есть таблица
ID1 , ID2 Int; Pole Float
Нужен запрос вида (типа):
SELECT ID1 , Умножение ( Pole )
GROUP BY ID1
Или это невозможно принципиально???
...
Рейтинг: 0 / 0
Умножение в запросе
    #32046621
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что означает Умножение(Pole) ???
...
Рейтинг: 0 / 0
Умножение в запросе
    #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
Умножение в запросе
    #32046629
Фотография MichaelGK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Balu, если в примере набора данных во второй строке столбца Pole вы ошиблись и поставили 1.2 вместо 1.5, то можно подумать... А если это не так, то не понятно, что нужно получить.
...
Рейтинг: 0 / 0
Умножение в запросе
    #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
Умножение в запросе
    #32046635
Фотография Hermitap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не умножение, это сумма

ваш запрос, тольк вместо слова умножение подставить Sum(Pole) as Результат
...
Рейтинг: 0 / 0
Умножение в запросе
    #32046636
Фотография Hermitap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пардон, ошибся...
невнимательно прочел....
...
Рейтинг: 0 / 0
Умножение в запросе
    #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
Умножение в запросе
    #32046642
Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо Jimmy
Но так и я сделал, тормоза жуткие записей порядка 15 миллионов :(
Хотелось бы ускорить вычисление.
Как я понимаю на стандартном T-SQL это невозможно ;(
...
Рейтинг: 0 / 0
Умножение в запросе
    #32046646
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я не проверял, но может подойдет такой вариант или некий подобный
Код: plaintext
1.
2.
3.
SELECT ID, avg(Pole) * count(Pole)
FROM table
GROUP BY ID
...
Рейтинг: 0 / 0
Умножение в запросе
    #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
Умножение в запросе
    #32046649
Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To AAron Ценю участие, но среднее арифметическое ??? помоему это слишком.
Ради интереса, результат по тестовому примеру:
id | mult
-----------
1 | 4.00
2 | 3.50
3 | 4.80
Причем с точки зрения математики (среднеарифметического) ВСЁ верно :)
...
Рейтинг: 0 / 0
Умножение в запросе
    #32046650
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Глупо уточнять, но тем не менее - индекс соответствующий имеется?
...
Рейтинг: 0 / 0
Умножение в запросе
    #32046651
AAron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Balu
я же написал, что не проверял :)
все... понял... тяжелый день был :))

пр умножении получится просто сумма :((
...
Рейтинг: 0 / 0
Умножение в запросе
    #32046652
Balu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To jimmers Спасибо, интересная идея .
Индекс построить не могу, в виду того, что это View собраный из 5-ти таблиц, как результат - запрос выполняется в 6-ть раз медленее чем с функцией работающей через кусрсор, я сам не понимаю причины :((
...
Рейтинг: 0 / 0
Умножение в запросе
    #32046654
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну так и надо писать VIEW, а не "Есть таблица"...
Кроме того, нельзя ли узнать - как именно формируется Представление?
...
Рейтинг: 0 / 0
Умножение в запросе
    #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
Умножение в запросе
    #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
Умножение в запросе
    #32046713
Фотография MichaelGK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svz58 - 5 баллов.
...
Рейтинг: 0 / 0
Умножение в запросе
    #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
Умножение в запросе
    #32046773
Фотография Jimmy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 jimmers
Ваша функция - элегантнее.

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


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