这个高级SQL语法是如何构建的?

时间:2013-04-30 18:36:05

标签: mysql statistics

我已经成功完成了W3Schools的SQL初学者和高级课程,并且找不到任何其他免费的高级SQL课程。我在this SO thread中接受的答案中遇到SQL语法问题,涵盖了列的中值的计算。我的问题是:

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

1 个答案:

答案 0 :(得分:2)

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

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

  1. 设置一个包含一些样本数据的表格 - 比如说
  2. 的5-8行
  3. HAVING值提升为SELECT列表
  4. 摆脱HAVING条款
  5. 所以你的查询看起来像这样:

    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通常是个好主意。计算不需要它,因此它不包含在查询中。