2

我已经成功完成了 W3Schools 的 SQL 初学者和高级课程,找不到任何其他免费的高级在线 SQL 课程。我在这个 SO 线程中接受的答案中的 SQL 语法有问题,包括计算一列的中值。我的问题是:

  1. 在'from'之后有两个变量。这是否意味着数据是从两个表中选择的,如果是这样,如果我只需要一个表的一列的中值,公式会如何?
  2. OP/TS 将此列命名为“id”和“val”。为什么选择“x.val”?
4

1 回答 1

2

与自身SELECT x.val from data x, data y交叉连接表的方法。data我很确定它最终只会找到一列的中位数,这是帮助计算中位数的技巧。

为了更好地理解这一点(并注意我并不完全理解它),试试这个:

  1. 建立一个包含一些示例数据的表 - 比如 5-8 行开始
  2. HAVING值提升到SELECT列表中
  3. 摆脱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 通常是个好主意。计算不需要它,因此它不包含在查询中。

于 2013-04-30T18:52:26.443 回答