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

Откуда:
Сообщений: 31
Здравствуйте у меня такой вопрос дана БД и в ней таблица Products c такими полями IDProduct, NameProduct, Price. Задача состоит в следующем надо выбрать и этой таблицы последнии 100 записей у которых NamePrice = 'Milk' и посчитать среднюю цену в этих записях.
Последние записи я выбрал а вот как посчитать среднюю цену не знаю

Select top 100 * from Products where NameProduct = 'Milk' Order By IDProduct Desc;
Заранее благодарю.
26 окт 09, 17:03    [7840098]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Glory
Member

Откуда:
Сообщений: 104760
Exiton

Последние записи я выбрал а вот как посчитать среднюю цену не знаю

Использовать функцию AVG()
26 окт 09, 17:05    [7840118]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31175
Exiton
Последние записи я выбрал а вот как посчитать среднюю цену не знаю
AVG
26 окт 09, 17:06    [7840120]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Только сначала оформить приведённый запрос в виде производной таблицы или CTE
26 окт 09, 17:13    [7840154]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Exiton
Member

Откуда:
Сообщений: 31
я знаю об этой функции у нее такой синтаксис SELECT AVG(OrderPrice) AS OrderAverage FROM Orders
но мне надо именно среднюю цену последних записей 100
26 окт 09, 17:14    [7840160]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Exiton
Member

Откуда:
Сообщений: 31
iap
Только сначала оформить приведённый запрос в виде производной таблицы или CTE
каким образом это можно сделать.
26 окт 09, 17:16    [7840172]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Glory
Member

Откуда:
Сообщений: 104760
Exiton
я знаю об этой функции у нее такой синтаксис SELECT AVG(OrderPrice) AS OrderAverage FROM Orders
но мне надо именно среднюю цену последних записей 100

А вы знаете, что такое вложенный запрос ?
26 окт 09, 17:17    [7840186]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Supra93
Member

Откуда:
Сообщений: 8174
Exiton
iap
Только сначала оформить приведённый запрос в виде производной таблицы или CTE
каким образом это можно сделать.

https://www.sql.ru/forum/actualthread.aspx?tid=706838#7840154
26 окт 09, 17:18    [7840190]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Exiton
Member

Откуда:
Сообщений: 31
Glory
Exiton
я знаю об этой функции у нее такой синтаксис SELECT AVG(OrderPrice) AS OrderAverage FROM Orders
но мне надо именно среднюю цену последних записей 100

А вы знаете, что такое вложенный запрос ?

Вот именно что не знаю. прощу помочь.
26 окт 09, 17:22    [7840216]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Glory
Member

Откуда:
Сообщений: 104760
Exiton
Glory
Exiton
я знаю об этой функции у нее такой синтаксис SELECT AVG(OrderPrice) AS OrderAverage FROM Orders
но мне надо именно среднюю цену последних записей 100

А вы знаете, что такое вложенный запрос ?

Вот именно что не знаю. прощу помочь.

select ... from (select ... from ...) as subquery_alisas ...
26 окт 09, 17:23    [7840223]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Exiton
Member

Откуда:
Сообщений: 31
Статистические функции и вложенные запросы несовместимы. на msdn написано
http://msdn.microsoft.com/ru-ru/library/ms177677(SQL.90).aspx
26 окт 09, 17:27    [7840252]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Glory
Member

Откуда:
Сообщений: 104760
Exiton
Статистические функции и вложенные запросы несовместимы. на msdn написано
http://msdn.microsoft.com/ru-ru/library/ms177677(SQL.90).aspx

А вам разве предлагают использовать вложенный запрос в качестве аргумента статистической функции ?
26 окт 09, 17:30    [7840265]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36803
Exiton
Статистические функции и вложенные запросы несовместимы. на msdn написано
http://msdn.microsoft.com/ru-ru/library/ms177677(SQL.90).aspx

Тогда почему работает?
declare @t table (value int)

insert @t
          select 1
union all select 2
union all select 3

select avg(value) from ( select top 2 * from @t order by value desc ) a


Сообщение было отредактировано: 26 окт 09, 17:30
26 окт 09, 17:30    [7840269]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Supra93
Member

Откуда:
Сообщений: 8174
Гавриленко Сергей Алексеевич
Exiton
Статистические функции и вложенные запросы несовместимы. на msdn написано
http://msdn.microsoft.com/ru-ru/library/ms177677(SQL.90).aspx

Тогда почему работает?
declare @t table (value int)

insert @t
          select 1
union all select 2
union all select 3

select avg(value) from ( select top 2 * from @t order by value desc ) a

баг
RC юзаете?
26 окт 09, 17:32    [7840281]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Exiton
Member

Откуда:
Сообщений: 31

select ... from (select ... from ...) as subquery_alisas ...

Спасибо большое получилось. работает.

А это можно в C# ADO как-то вернуть это значение.
26 окт 09, 17:33    [7840287]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Exiton
Member

Откуда:
Сообщений: 31
Спасибо большое всем за ответы на этом сайте действительно спецы просто супер как можно
благодарить на этом форуме?
26 окт 09, 17:34    [7840291]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Exiton
Member

Откуда:
Сообщений: 31
Друзья а как задать параметризированный запрос и чтобы не точно возвращало TOP 100 значений
а заранее не известно сколько когда я пишу TOP @Numbers выдает ошибку.
26 окт 09, 18:22    [7840601]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Exiton
когда я пишу TOP @Numbers выдает ошибку.
А у меня никакой ошибки
declare @t table (value int)

insert @t
          select 1
union all select 2
union all select 3

declare @n int
set @n = 2

select avg(value) from ( select top(@n) * from @t order by value desc ) a
26 окт 09, 18:26    [7840618]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Exiton
Member

Откуда:
Сообщений: 31
Написал так как Вы показали
declare @n int
set @n = 5
select top (@n) * from Products Order By IDproduct desc;
выдает следующую ошибку
Line 3: Incorrect syntax near '('. Я проверяю запросы в SQL Query Analizer и
работаю в MS SQL Server 2000
26 окт 09, 20:02    [7841009]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Exiton
Написал так как Вы показали
declare @n int
set @n = 5
select top (@n) * from Products Order By IDproduct desc;
выдает следующую ошибку
Line 3: Incorrect syntax near '('. Я проверяю запросы в SQL Query Analizer и
работаю в MS SQL Server 2000
Например, построить динамический запрос
26 окт 09, 20:18    [7841042]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Exiton
Member

Откуда:
Сообщений: 31
Здравствуйте еще раз, разобрался со вложенными запросами, теперь такой вопрос:
Вот я создал вот такой запрос
"Select avg(Price) as Average from(select * from
(Select top 1000 * from Products Order By IDProduct desc) as squer1 where Vid = @VidP ) as subqui1
меня интерисует на сколько быстро будет выполнятся такой запрос если в таблице Products будут
несколько миллионов записей а извлекать нужно примерно несколько тысяч последних строк
из таблицы.
В этом запросе получается сначал данные сортируются по столбцу IDProduct, потом извлекаются
верхние 1000 строк, мне почему-то кажется что не оптимально так делать
может быть есть более быстрый способ для извлечения последних N записей из таблицы.
Кто знает помогите
Заранее благодарю!
27 окт 09, 13:28    [7844146]     Ответить | Цитировать Сообщить модератору
 Re: Как составить запрос SQL посчитать среднее арифметическое по определенных строк  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36803
Exiton
В этом запросе получается сначал данные сортируются по столбцу IDProduct, потом извлекаются
верхние 1000 строк, мне почему-то кажется что не оптимально так делать

Это вы в плане выполнения запроса увидели?
27 окт 09, 13:35    [7844186]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить