看看这个SQLFiddle演示,它通过几个步骤运行您的语句。
首先,这个
SELECT R.A, R.B, S.B AS sb, S.C
FROM R, S
ORDER BY R.A, S.C
这给了你:
A B SB C
1 2 1 3
1 3 1 3
1 2 2 4
1 3 2 4
3 4 1 3
3 4 2 4
WHERE
然后在约束下运行它:
SELECT R.A, R.B, S.B AS sb, S.C
FROM R, S
WHERE R.B < 4
ORDER BY R.A, S.C
这使:
A B SB C
1 2 1 3
1 3 1 3
1 2 2 4
1 3 2 4
然后通过GROUP BY
. 通常,您只能使用或其他列中提到的列,但只能在诸如or之GROUP BY
类的聚合函数中使用(但 MySQL 是宽容的,这就是为什么在此示例中使用 PostgreSQL 服务器以更好地与 SQL92 兼容):avg
max
SELECT R.A, avg(R.B) AS av, S.C, max(S.B) AS maxsb
FROM R, S
WHERE R.B < 4
GROUP BY R.A, S.C
产生:
A AV C MAXSB
1 2.5 3 1
1 2.5 4 2
添加HAVING
子句(并且只保留一行之前的结果):
SELECT R.A, avg(R.B) as av, S.C, max(S.B) AS maxsb
FROM R, S
WHERE R.B < 4
GROUP BY R.A, S.C
HAVING max(S.B) >= 2
产生:
A AV C MAXSB
1 2.5 4 2
最后,将未使用的列删除SELECT
:
SELECT R.A, avg(R.B) as av
FROM R, S
WHERE R.B < 4
GROUP BY R.A, S.C
HAVING max(S.B) >= 2
并得到:
A AV
1 2.5