从表格中的列中查找最小数字

时间:2016-08-07 23:36:20

标签: sql oracle

我有3张桌子 - EVENT,MEMBER,RANK。对于特定事件(ex EVENT01),我需要显示最佳结果(来自RANK)及其所属成员(最简单的方法)是什么?我的下面的代码似乎选择了最小的数字,但重复自己并声称其他成员得到了相同的结果。

预期产出:

EVENT_ID    EVENT_TYPE    EVENT_NAME    MEMBER_ID    MEMBER_NAME    RESULT
event01     swimming      100m          mem001       John Smith     10
到目前为止

代码:

SELECT E.EVENT_ID, E.EVENT_TYPE, E.EVENT_NAME, R.MEMBER_ID, M.MEMBER_FIRSTNAME, M.MEMBER_LASTNAME, (SELECT MIN(RESULT)
FROM RANK WHERE E.EVENT_ID = 'EVENT003' ) AS AVG_INCOME_ALL_CLUBS
FROM EVENT E, RANK R, MEMBER M
WHERE E.EVENT_ID = R.EVENT_ID
AND R.MEMBER_ID = M.MEMBER_ID
ORDER BY MEMBER_ID;

2 个答案:

答案 0 :(得分:0)

首先,学会使用明确的JOIN语法。

其次,您的问题的答案是ROW_NUMBER()

SELECT *
FROM (SELECT E.EVENT_ID, E.EVENT_TYPE, E.EVENT_NAME, R.MEMBER_ID, M.MEMBER_FIRSTNAME, M.MEMBER_LASTNAME,
             ROW_NUMBER() OVER (PARTITION BY E.EVENT_ID ORDER BY R.RESULT ASC) as SEQNUM
      FROM EVENT E, JOIN
           RANK R
           ON E.EVENT_ID = R.EVENT_ID JOIN
           MEMBER M 
           ON R.MEMBER_ID = M.MEMBER_ID
    ) ERM
WHERE SEQNUM = 1
ORDER BY MEMBER_ID;

答案 1 :(得分:0)

 SELECT E.EVENT_ID, E.EVENT_TYPE, E.EVENT_NAME, R.MEMBER_ID,M.MEMBER_FIRSTNAME, M.MEMBER_LASTNAME,
 FROM EVENT E, JOIN
       RANK R
       ON E.EVENT_ID = R.EVENT_ID JOIN
       MEMBER M 
       ON R.MEMBER_ID = M.MEMBER_ID
       where R.RESULT=
 (SELECT MIN(RESULT) FROM RANK WHERE E.EVENT_ID = 'EVENT003') AND R.EVENT_ID='EVENT003';