Как найти среднюю разницу в mysql? - PullRequest
0 голосов
/ 07 марта 2020

Рассмотрим таблицу сотрудника, хранящую данные сотрудника.

ssn : social security number of the employee
address : storing the address of the employee

Глядя на поле адреса в таблице сотрудников, вы заметите, что все сотрудники находятся в «Fondren, Хьюстон, Техас». Рассмотрим целое число в поле адреса как номер дома. Рассмотрим расстояние между двумя домами как разницу в количестве домов, поэтому расстояние между домами № 2 и 38 составляет 36 единиц. Напишите запрос, чтобы определить среднее расстояние между домом сотрудника с ssn = '123456789' и домами других сотрудников. Распечатать ответ с точностью до двух знаков после запятой. Убедитесь, что ответ отформатирован запятой, например, x, xxx.xx.

Может кто-нибудь помочь мне решить эту проблему?

Я не хочу использовать функцию SQL.

Я сделал следующий запрос:

SELECT 
    avg(
    abs(CAST(address AS UNSIGNED) - 
    SELECT CAST(address AS UNSIGNED) from test.test where ssn = 1234)
    ) as average from test.test;

1 Ответ

0 голосов
/ 07 марта 2020

Предполагая, что вы не хотите включать расстояние от дома сотрудника до его собственного дома, вам нужно вычислить среднее значение, исключая это. Один из способов сделать это - CROSS JOIN с помощью таблицы номеров домов служащих , а не , включая заинтересованного работника, и таблицы чисел дома заинтересованного работника. Затем вы можете вычислить SUM абсолютных разностей и разделить их на количество строк, чтобы получить среднее значение. Затем вы можете использовать FORMAT, чтобы получить вывод в нужном формате:

SELECT FORMAT(SUM(ABS(oth - emp)) / COUNT(oth), 2) AS average
FROM (
      SELECT CAST(address AS SIGNED) AS oth
      FROM test
      WHERE ssn != '1234'
     ) t
CROSS JOIN (
      SELECT CAST(address AS SIGNED) AS emp
      FROM test
      WHERE ssn = '1234'
     ) t2

Демонстрация по SQLFiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...