我已经成功完成了W3Schools的SQL初学者和高级课程,并且找不到任何其他免费的高级SQL课程。我在this SO thread中接受的答案中遇到SQL语法问题,涵盖了列的中值的计算。我的问题是:
答案 0 :(得分:2)
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通常是个好主意。计算不需要它,因此它不包含在查询中。