我已经成功完成了 W3Schools 的 SQL 初学者和高级课程,找不到任何其他免费的高级在线 SQL 课程。我在这个 SO 线程中接受的答案中的 SQL 语法有问题,包括计算一列的中值。我的问题是:
- 在'from'之后有两个变量。这是否意味着数据是从两个表中选择的,如果是这样,如果我只需要一个表的一列的中值,公式会如何?
- OP/TS 将此列命名为“id”和“val”。为什么选择“x.val”?
我已经成功完成了 W3Schools 的 SQL 初学者和高级课程,找不到任何其他免费的高级在线 SQL 课程。我在这个 SO 线程中接受的答案中的 SQL 语法有问题,包括计算一列的中值。我的问题是:
与自身SELECT x.val from data x, data y
交叉连接表的方法。data
我很确定它最终只会找到一列的中位数,这是帮助计算中位数的技巧。
为了更好地理解这一点(并注意我并不完全理解它),试试这个:
HAVING
值提升到SELECT
列表中HAVING
条款因此,您的查询将如下所示:
SELECT x.val, SUM(SIGN(1-SIGN(y.val-x.val))), (COUNT(*)+1)/2
FROM data x, data y
GROUP BY x.val
然后看一下结果,您将能够更深入地了解逻辑。还请查看您是否可以在逐行跟踪计算时遵循计算。
最后,请注意,查询与其说是专业的不如说是高级的。我的意思是,它是先进的,但它可能给你带来麻烦的是数学体操而不是查询语义。如果您不立即理解这一点,请不要担心:)
至于为什么val
选择 - 那是 OP 试图计算中位数的列。id
可能是因为在每一行都有一个 PK 通常是个好主意。计算不需要它,因此它不包含在查询中。