Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kpacaba
Member

Откуда:
Сообщений: 80
select distinct
AVG(i.price) AS 'AVG name'
,COUNT(i.price)
,f.fut_rts_rub/0.02/f.usd AS 'Futprice'
,f.fut_rts_rub/0.02/f.usd - AVG(i.price) AS 'Difference'
FROM INDARB.dbo.rts_calc AS f inner join INDARB.dbo.arch_rts_index AS i
On f.fut_rts_rub = f.fut_rts_rub
Where i.timestamp between '2011-06-09 12:00:00.000' and '2011-06-09 12:59:00.000'
group by f.fut_rts_rub, f.usd

Считает почему то avg по всем строкам
9 июн 11, 12:13    [10788601]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
Romka-Fes
Member

Откуда: Kyiv
Сообщений: 476
kpacaba,
Выберите сначала запросом с distinct нужные строки во вложенном подзапросе, а потом посчитайте среднее значение по результату этого запроса.
9 июн 11, 12:16    [10788635]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
select AVG(distinct i.price) 
9 июн 11, 12:23    [10788719]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
kpacaba, есть синтаксис AVG(...), а еще есть синтаксис AVG(DISTINCT ...)
9 июн 11, 12:23    [10788721]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Только вот AVG(distinct i.price) - это вовсе не уникальные записи )
9 июн 11, 12:25    [10788739]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kpacaba
Member

Откуда:
Сообщений: 80
Romka-Fes,

ещё бы знать как это сделать? где можно почитать про вложенные подзапросы?
9 июн 11, 12:25    [10788745]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
Glory
Только вот AVG(distinct i.price) - это вовсе не уникальные записи )
блин :)
9 июн 11, 12:26    [10788751]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kpacaba
Member

Откуда:
Сообщений: 80
Да, avg(distinct, i.price) не помогло, не уникальные строки
9 июн 11, 12:30    [10788782]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
Romka-Fes
Member

Откуда: Kyiv
Сообщений: 476
kpacaba,

http://msdn.microsoft.com/ru-ru/library/ms189575.aspx
9 июн 11, 12:35    [10788842]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
Romka-Fes
Member

Откуда: Kyiv
Сообщений: 476
kpacaba
Да, avg(distinct, i.price) не помогло, не уникальные строки

Может это
SELECT  AVG (val + 0.00000) AS AvgVal FROM (
	select  /* играемся коментариями  distinct   */ val FROM (select 1 as val
			UNION ALL 
			select 20 as val
			UNION ALL 
			select 20 as val
			UNION ALL 
			select 3 as val
			UNION ALL 
			select 3 as val
			UNION ALL 
			select 4 as val
			UNION ALL 
			select 5 as val
			UNION ALL 
			select 6 as val
	) a
) b
Вам поможет?
9 июн 11, 12:40    [10788902]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kpacaba
Member

Откуда:
Сообщений: 80
Romka-Fes,

что то не очень понял как это использовать(((
9 июн 11, 12:54    [10789047]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
Glory
Member

Откуда:
Сообщений: 104751
kpacaba
Romka-Fes,

что то не очень понял как это использовать(((

Никакие агрегатные функции не будут за вас фильтровать уникальные записи
Это должны делать вы
9 июн 11, 12:55    [10789063]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kpacaba
Member

Откуда:
Сообщений: 80
Glory,

я это понимаю, но как это оформить в виде фильтрации строк, а после вычисления по ним
9 июн 11, 13:01    [10789113]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
Glory
Member

Откуда:
Сообщений: 104751
kpacaba
Glory,

я это понимаю, но как это оформить в виде фильтрации строк, а после вычисления по ним

В виде вложенных запросов. Вам же показали
9 июн 11, 13:03    [10789127]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
Romka-Fes
Member

Откуда: Kyiv
Сообщений: 476
kpacaba
Romka-Fes,

что то не очень понял как это использовать(((


Разницу между
SELECT  AVG (val + 0.00000) AS AvgVal FROM (
	select   val FROM (select 1 as val
			UNION ALL 
			select 20 as val
			UNION ALL 
			select 20 as val
			UNION ALL 
			select 3 as val
			UNION ALL 
			select 3 as val
			UNION ALL 
			select 4 as val
			UNION ALL 
			select 5 as val
			UNION ALL 
			select 6 as val
	) a
) b
и
SELECT  AVG (val + 0.00000) AS AvgVal FROM (
	select   distinct    val FROM (select 1 as val
			UNION ALL 
			select 20 as val
			UNION ALL 
			select 20 as val
			UNION ALL 
			select 3 as val
			UNION ALL 
			select 3 as val
			UNION ALL 
			select 4 as val
			UNION ALL 
			select 5 as val
			UNION ALL 
			select 6 as val
	) a
) b
чувствуем?
9 июн 11, 13:05    [10789149]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kpacaba
Member

Откуда:
Сообщений: 80
Romka-Fes,

разница в distinct'е
9 июн 11, 13:09    [10789186]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kpacaba
Member

Откуда:
Сообщений: 80
Select AVG(price), COUNT(price) AS AvgVal FROM (
Select distinct *
FROM INDARB.dbo.arch_rts_index AS i
Where timestamp between '2011-06-09 13:00:00.000' and '2011-06-09 13:59:00.000') a

ок считает теперь по уникальным строчкам, проблема теперь в следующем, как с иннерджоинить это с другой таблицей, как это сделано в первичном запросе?
9 июн 11, 13:28    [10789363]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kpacaba
Member

Откуда:
Сообщений: 80
Я сделал вот так, выдает ошибку

Select
AVG(price) AS 'AVG'
,COUNT(price)AS Number
,fut_rts_rub/0.02/usd AS 'Futures'


FROM (

Select distinct *
FROM INDARB.dbo.rts_calc AS i inner join INDARB.dbo.arch_rts_index AS f on i.fut_rts_rub = i.fut_rts_rub
Where timestamp between '2011-06-09 13:00:00.000' and '2011-06-09 13:59:00.000'
group by i.fut_rts_rub, i.usd
) a
9 июн 11, 14:04    [10789667]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
kpacaba, а какая именно ошибка - коммерческая тайна? Без паяльника не признаетесь?
* Хотя предполагаю деление на ноль.
9 июн 11, 14:11    [10789711]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kpacaba
Member

Откуда:
Сообщений: 80
kDnZP,

sg 8120, Level 16, State 1, Line 1
Column 'INDARB.dbo.rts_calc.index_rts_rub' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.


предполагаю что group by в таких конструкциях нельзя использовать, как тогда реализовать это?
9 июн 11, 14:16    [10789748]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
kpacaba, вместо "*" перечислите поля, а также проконтролируйте чтобы они были либо в GROUP BY, либо в агрегирующей функции.
9 июн 11, 14:32    [10789873]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kpacaba
Member

Откуда:
Сообщений: 80
kDnZP,

Select
AVG(price) AS 'AVG'
,COUNT(price)AS Number
,fut_rts_rub/0.02/usd AS 'Futures'


FROM (

Select distinct i.fut_rts_rub, i.usd
FROM INDARB.dbo.rts_calc AS i inner join INDARB.dbo.arch_rts_index AS f on i.fut_rts_rub = i.fut_rts_rub
Where timestamp between '2011-06-09 13:00:00.000' and '2011-06-09 13:59:00.000'
group by i.fut_rts_rub, i.usd
) a


Msg 207, Level 16, State 1, Line 2
Invalid column name 'price'.
Msg 207, Level 16, State 1, Line 3
Invalid column name 'price'.
9 июн 11, 15:00    [10790120]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
kpacaba, слегка привел в порядок:

SELECT  AVG(a.price) AS 'AVG',
        COUNT(a.price) AS Number,
        CASE WHEN a.usd=0 THEN NULL ELSE  a.fut_rts_rub / 0.02 / a.usd END AS 'Futures'
FROM    ( SELECT DISTINCT
                    i.fut_rts_rub,
                    i.usd,
                    i.price -- или f.price
          FROM      INDARB.dbo.rts_calc AS i
          INNER JOIN INDARB.dbo.arch_rts_index AS f
          ON        i.fut_rts_rub = i.fut_rts_rub -- это че такое? Наверное нужно i.fut_rts_rub = f.fut_rts_rub ?
          WHERE     timestamp BETWEEN '20110609 13:00:00.000'
                              AND     '20110609 13:59:00.000'
        ) a
GROUP BY a.fut_rts_rub,
        a.usd
9 июн 11, 15:07    [10790175]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Зачем во вложенном запросе и distinct и group by ?
Вы в состоянии получить сначала набор данных, для которого будете делать агрегаты ?
9 июн 11, 15:08    [10790181]     Ответить | Цитировать Сообщить модератору
 Re: Почему при подсчете avg distinct не отсеивает не уникальные строки?  [new]
kpacaba
Member

Откуда:
Сообщений: 80
в одном запросе для того, чтобы у меня одновременно считался агрегат из одной таблицы + сюда же попадали данные из другой таблицы и уже с этими данными из другой таблицы проводились вычислительные операции с агрегатами
9 июн 11, 15:34    [10790384]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить