考虑一个存储员工详细信息的表员工。
ssn : social security number of the employee
address : storing the address of the employee
Run Code Online (Sandbox Code Playgroud)
查看员工表中的地址字段,您会注意到所有员工都居住在“Fondren, Houston, TX”。将地址字段中的整数视为门牌号。把两栋房子的距离看成是门牌号的差,所以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;
Run Code Online (Sandbox Code Playgroud)
假设您不想包括从员工家到他们自己家的距离,您需要计算不包括该距离的平均值。一种方法是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 != '123456789'
) t
CROSS JOIN (
SELECT CAST(address AS SIGNED) AS emp
FROM test
WHERE ssn = '123456789'
) t2
Run Code Online (Sandbox Code Playgroud)