我在MySQL中有mycash
表,其中包含以下数据:
测试案例1:
当我运行以下查询时,
SELECT t.id, SUM(prev.cash) AS cash_sum FROM mycash t JOIN mycash prev ON (t.id > prev.id)
我明白了:
id | cash_sum
2 | 1303.00
总结所有行的cash
值等于1302和 NOT 1303。
我更改ON
条件中的比较运算符并获得以下结果:
测试案例2:
对于ON (t.id < prev.id)
,结果为:
id | cash_sum
1 | 2603.00
测试案例3:
对于ON (t.id >= prev.id)
,结果为:
id | cash_sum
1 | 2605.00
测试案例4:
对于ON (t.id <= prev.id)
,结果为:
id | cash_sum
1 | 3905.00
每个结果背后的计算是什么?逐步解释将最清楚他们。
答案 0 :(得分:0)
答案 1 :(得分:0)
是的,我得到了自己的答案。这很简单。
对于ON
条件下的任何比较运算符,我们必须将table t
中的每一行与table prev
中的所有其他行进行比较。在任何情况下,查询都将输出所有行中所有cash
值的总和(返回的总行数 NOT 最多为4)。
让我解释测试用例1 :
SELECT t.id, SUM(prev.cash) AS cash_sum FROM mycash t JOIN mycash prev ON (t.id > prev.id)
我们必须从table prev
中选择那些id
个数字少于id
中的table t
的行。
从第一个表格,即table t
,当id
数字为1时,我们从第二个表格中得不到相应的行,即table prev
。当第一个表中的id
为2时,我们从第二个表中得到id
1(现金= 200)。如果第一张表中的id
为3,则第二张表中有1和2(分别为现金= 200和301)。当id
从第一个表开始为4时,我们有id
s 1,2,3(现金= 200,301,101)。因此,在添加所有cash
值后,cash_sum
变为200 + 200 + 301 + 200 + 301 + 101 = 1303。
其他测试用例可以用类似的方式解释。