我在W3Schools成功地完成了SQL初学者和高级课程,找不到任何其他免费的高级onine SQL课程。我对this SO thread中接受的答案中的SQL语法有问题,其中包括计算列的中值。我的问题是:
“from”后面有两个变量。这是否意味着数据是从两个表中选择的,如果是这样,如果我只需要一个表中一列的中值,那么公式会是怎样的呢?
操作系统将此列命名为“id”和“val”。为什么选择“x.val”?
最佳答案
SELECT x.val from data x, data y
表示将表data
与自身交叉连接。我很确定它最终只找到一列的中值,这是一个帮助计算中值的技巧。
为了更好地理解这一点(并注意到我并不完全理解),请尝试以下操作:
用一些示例数据建立一个表-比如以5-8行开头
将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通常是一个好主意。计算不需要它,因此它不包含在查询中。关于mysql - 如何构造这种高级SQL语法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16306729/