说明: 基本上它是一个2D网格。
目标:计算特定位置(蓝色单元格)周围特定范围(红色方块)的奖励(绿色单元格)总和。
注意:坐标可能是负数。
蓝色单元格是特定位置,位于T1表格中。
表T1:
x, y
绿色细胞是特定坐标处具有不同值的奖励,位于T2表中。
表T2:
x, y, bonus
要计算最终奖金,请从T2获得绿色奖金(LIMON 3 BY BONUS DESC),这些奖金在7码×7的正方形内,以T1的蓝色单元为中心。
在此示例中,此蓝色单元格的答案(计算的奖励)为20 + 15 + 10。
我对MySQL中的连接和子查询有点新意,所以对我来说解释问题是非常复杂的,所以我将主要显示代码。
以下是我的查询。这个有效,因为我在子查询中强制坐标(见-10和-100),但我需要用c.x和c.y替换这些值-10和-100。
问题是我不能使用'c'。
我收到以下错误:'where子句'中的未知列'c.x'。
SELECT
c.x,
c.y,
(
SELECT Sum(bonus) AS bonus
FROM
(
SELECT bonus
FROM t2
WHERE Abs(-10 - x) <= 3
AND Abs(-100 - y) <= 3
ORDER BY bonus DESC
LIMIT 3
) AS sub
) AS bonus
FROM t1 AS c
然后我尝试了CROSS JOIN,同样的问题。
SELECT
c.x,
c.y
FROM t1 AS c
CROSS JOIN
(
SELECT Sum(bonus) AS bonus
FROM
(
SELECT bonus
FROM t2
WHERE Abs(-10 - x) <= 3
AND Abs(-100 - y) <= 3
ORDER BY bonus DESC
LIMIT 3
) AS sub
) AS b
注意:
答案 0 :(得分:0)
然后你可能希望JOIN
喜欢
SELECT
c.x,
c.y, sub.bonus
FROM t1 AS c JOIN
(
SELECT Sum(bonus) AS bonus
FROM t2
WHERE Abs(-c.x - x) <= 3
AND Abs(-c.y - y) <= 3
ORDER BY bonus DESC
LIMIT 3
) as sub ON c.Id = sub.Id;
答案 1 :(得分:-1)
我相信这会做你想做的事情
func formatHour(hour:Int) -> String {
return (String(hour).characters.count == 1) ? "0\(hour)" : "\(hour)"
}
let hour = 5
print("\(formatHour(hour: hour))") // output "05"