SQL查询根据条件选择行

时间:2014-01-29 14:08:28

标签: sql select conditional-statements

SELECT
    MNo, X, Y, Z
FROM
    Coord C
    JOIN Result R ON R.ResultID = C.ResultID
    JOIN Member M ON M.MemberID = R.MemberID
WHERE
    M.StdID = @stdID
GROUP BY
    MNo

我有一个查询女巫给我MNo代表的每个成员的x,y和z坐标。有些会员可以有多行坐标,我想得到那些坐标的平均值(只有那些坐标),比如

MNo     x       y       z
15      10.6    12.3    20.1
16      11.1    17.8    14.0

省略成员1-14和17-只有一行坐标。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

对于问题的第1部分 - 平均,AVG就是您所需要的。

对于问题的第2部分 - 如何过滤掉成员1-14和17-,你需要一个WHERE子句。

对于问题的第3部分 - 如何摆脱只有1行坐标的成员,你需要一个HAVING子句。

将这些结合起来,我们有:

SELECT
    MNo, AVG(X) AS X, AVG(Y) AS Y, AVG(Z) AS Z
FROM
    Coord C
    JOIN Result R ON R.ResultID = C.ResultID
    JOIN Member M ON M.MemberID = R.MemberID
WHERE
    M.StdID = @stdID
   AND M.MNo NOT BETWEEN 1 AND 14
   AND M.MNo NOT BETWEEN 17 and 20
GROUP BY
    MNo
HAVING
    COUNT(1) > 1

注意:

  • 如果您只召集成员1-14和17-因为那些只有一组坐标的成员,那么您可以忽略两个“AND M.MNo NOT IN”语句。
  • COUNT(1)中的字段并不重要(也可以是COUNT(*)或COUNT(X)等) - 任何字段都会返回行数,而HAVING过滤器会删除只有一排。