У меня есть таблица с двумя столбцамиИспользование агрегатной функции с арифметической операции
Здесь мне нужно найти SQL в соответствии со следующей функцией,
Z = accelx-AVG(accelx) for every rows.
У меня есть таблица с двумя столбцамиИспользование агрегатной функции с арифметической операции
Здесь мне нужно найти SQL в соответствии со следующей функцией,
Z = accelx-AVG(accelx) for every rows.
Просто рассчитать AVG
в подзапроса :
SELECT AccelX - (SELECT AVG(AccelX) FROM T)
FROM T
Используйте оконную функцию. 'AVG (AccelX) OVER()' –
@MatthewWhited Не у каждого db есть –
Попробуйте следующее:
select t1.accelx - t2.avgx as Z
from TableName as t1
inner join (
select avg(accelx) as avgx
from TableName
) as t2
on 1 = 1
'on 1 = 1'? Это кросс-соединение, поэтому вы должны заменить 'inner join' на' cross join' и удалить необязательное предложение 'on'. –
SELECT t1.accelx - t2.avgx as Z, userName
FROM TableName as t1
JOIN (SELECT userName, avg(accelx) as avgx
FROM TableName
GROUP BY userName) as t2
ON t1.userName = t2.userName
Это обычно делается с аналитической версии AVG
:
select accelx - avg(accelx) over()
from mytable;
Вы правы, но не у всех db есть. Я бы включил 'partition by userName' –
Я бы тоже, если бы хотел среднего пользователя. Я не хочу, если это то, чего хочет OP, однако ;-) –
TSQL на MSSQL Server имеет WINDOWED функции. OVER Clause
SELECT
[AccelX]
,[AccelX] - AVG([AccelX]) OVER()
FROM T
и какой двигатель и версия базы данных вы используете ?. Какой код вы пробовали? – Lamak