这是我最新的难题:
我需要查询给定距离内的百分比客户,其中表CUSTOMERS的列为CUST(客户编号),LOCX(距离+ - 值),LOCY(距离+ - 值)。
X将是我给定的距离。
到目前为止,我有:
SELECT CUST
FROM CUSTOMER
WHERE
ABS (LOCX) <= X
AND
ABS (LOCY) <= X
这为我提供了X内的客户,但仍需要百分比值。
结果表最好包括距离(X),记录数,记录总数和客户百分比(返回记录的百分比)
答案 0 :(得分:0)
这是你在找什么?它使用条件聚合来获取X中的数字:
SELECT X,
sum(case when abs(locx) <= x and abs(locy) <= x then 1 else 0 end) as NumWithinX,
count(*) as Num,
avg(case when abs(locx) <= x and abs(locy) <= x then 1.0 else 0 end) as RatioInX
FROM CUSTOMER;
编辑:
在MySQL中,你可以做你想做的事情:
SELECT X,
sum(abs(locx) <= x and abs(locy) <= x) as NumWithinX,
count(*) as Num,
concat(avg(abs(locx) <= x and abs(locy) <= x)*100, '%') as PercentInX
FROM CUSTOMER;
case
表单也有效(并且是ANSI标准)。 MySQL将布尔值视为0
或1
,因此您可以对它们进行直接算术处理。