powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL Запрос с выводом среднего значения
5 сообщений из 5, страница 1 из 1
SQL Запрос с выводом среднего значения
    #39991592
Руслан_77_05
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Помогите понять, что не так, пытаюсь сделать запрос для получения данных из двух таблиц:
Код: sql
1.
2.
3.
4.
5.
SELECT        CAST(Products.Наименование AS NVARCHAR(MAX)) AS Наименование, AVG(Products.id) AS [Усредненный ID] 
FROM            Products INNER JOIN
                         History ON Products.id = History.idЗаказа AND History.ДатаВремя BETWEEN '20200710 00:00:00' AND '20200712 23:59:59'
GROUP BY CAST(Products.Наименование AS NVARCHAR(MAX))
HAVING        (CAST(Products.Наименование AS NVARCHAR(MAX)) = N'Название товара номер 3')



Название товара Среднее_IDНазвание товара номер 3 9743

Все работает, выводится одна строка объеденная по названию и с выводом среднего значения ID, но при попытке добавить в данную строку столбец в котором будет выводится среднее значение затраченное между сменами статусов. То выходит ошибка, либо 7 строк (каждое значение отдельно). Не получается объединить и вывести среднее как ID

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT        CAST(Products.Наименование AS NVARCHAR(MAX)) AS Наименование, AVG(Products.id) AS [Усредненный ID] ,
                              (SELECT        DATEDIFF(MINUTE,
                                                             (SELECT        TOP (1) ДатаВремя
                                                               FROM            History AS History_1
                                                               WHERE        idЗаказа = Products.id AND Статус = 3),
                                                             (SELECT        TOP (1) ДатаВремя
                                                               FROM            History AS History_2
                                                               WHERE        idЗаказа = Products.id AND Статус = 4))) AS [Время затраченное на сборку]
FROM            Products INNER JOIN
                         History ON Products.id = History.idЗаказа AND History.ДатаВремя BETWEEN '20200710 00:00:00' AND '20200712 23:59:59'
GROUP BY CAST(Products.Наименование AS NVARCHAR(MAX))
HAVING        (CAST(Products.Наименование AS NVARCHAR(MAX)) = N'Название товара номер 3')



Столбец "Products.id" недопустим в списке выбора, поскольку он не содержится ни в агрегатной функции, ни в предложении GROUP BY.

Если добавить Products.id в GROUP BY получаем 7 строк

Название товара Среднее_ID Среднее_ВремяНазвание товара номер 3 9740 NULLНазвание товара номер 3 9741 8Название товара номер 3 9742 44Название товара номер 3 9743 NULLНазвание товара номер 3 9744 8Название товара номер 3 9745 14Название товара номер 3 9746 NULL


Как нужно изменить запрос что бы получить одну строку вида:

Название товара Среднее_ID Среднее_ВремяНазвание товара номер 3 9743 18.5
...
Рейтинг: 0 / 0
SQL Запрос с выводом среднего значения
    #39991594
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая-то дичь дичайшая.

В качестве вангования:

Код: sql
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.
SELECT
    p.Наименование, 
    , AVG(Products.id) AS [Усредненный ID]  -- похоже на какой-то бред
    , avg ( DATEDIFF(MINUTE,f.ДатаВремя,t.ДатаВремя) )
FROM        Products    p
INNER JOIN  History     h ON p.id = h.idЗаказа 
outer apply (
    SELECT TOP (1) 
        x.ДатаВремя
    FROM        History AS x
    WHERE       x.idЗаказа = p.id AND x.Статус = 3
    -- Где order by?
) f
outer apply (
    SELECT TOP (1) 
        x.ДатаВремя
    FROM            History AS x
    WHERE
        x.idЗаказа = p.id AND xСтатус = 4
    -- Где order by?
) t
where
    h.ДатаВремя BETWEEN '20200710 00:00:00' AND '20200712 23:59:59'
    and p.Наименование = N'Название товара номер 3'
GROUP BY p.Наименование




Но 18.5 не является средним от тех чисел, что приведены в примере.
...
Рейтинг: 0 / 0
SQL Запрос с выводом среднего значения
    #39991596
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан_77_05,

авторСтолбец "Products.id" недопустим

Естественно, он используется в скалярном запросе. Сам запрос мутный, Вы находите разницу между двумя случайными датами. И какую ценность имеет AVG(Products.id) - непонятно.
...
Рейтинг: 0 / 0
SQL Запрос с выводом среднего значения
    #39991616
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан_77_05
Код: sql
1.
AVG(Products.id) AS [Усредненный ID]

Это типа медиана?
Тогда это полная фигня.

Нужно примерно так
Код: sql
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.
with h as
(
 select
  idЗаказа,
  min(case when Статус = 3 then ДатаВремя end) as min_dt,
  max(case when Статус = 4 then ДатаВремя end) as max_dt
 from
  History
 where
  ДатаВремя between '20200710 00:00:00' and '20200712 23:59:59'
 group by
  idЗаказа
),
m as
(
 select
  idЗаказа, min_dt, max_dt,
  row_number() over (order by idЗаказа) as rn,
  count(*) over () as c
 from
  h
)
select
 p.Наименование, m.idЗаказа, datediff(minute, m.min_dt, m.max_dt)
from
 m join
 Products p on p.id = m.idЗаказа
where
 m.rn = m.c / 2;
...
Рейтинг: 0 / 0
SQL Запрос с выводом среднего значения
    #39991839
Руслан_77_05
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич, доброй ночи, исходя из Вашего примера, многое стало ясно. Хочу поблагодарить Вас за Ваш пример запроса, он подтолкнул к разбору своего запроса, исходя из этого было четкое понимание что действительно была дичь дичайшая .
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / SQL Запрос с выводом среднего значения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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