假设我有下表'播放器'在oracle数据库中:
P_ID P_NAME C_ID DEBUT MATCH RUNS
101 amla 204 2003 190 5000
102 mushi 200 2001 240 7500
103 sakib 200 1999 150 5000
104 ricky 205 1993 180 7000
105 sachin 203 1990 250 8000
106 yuvi 203 1999 150 6900
我需要一个查询来显示c_id,这个国家的所有击球手都有最大的跑步得分手。 (在这种情况下,最大比赛得分手是 萨钦。所以查询应该返回:c_id = 203,runs = 14900)。
我只能找到最大的得分手和他所属的国家。查询: 选择c_id,从运行中的运行器运行=(从播放器中选择max(运行)); 那样做。但是,我无法继续下去。
答案 0 :(得分:0)
当您需要聚合函数的条件时,必须使用子查询或having子句。 这总是返回一行,但是当多于一个组具有相同的总数时,这是错误的:
SELECT *
FROM (
SELECT c_id, Sum(runs) total
FROM player
GROUP BY c_id
ORDER BY total DESC
) WHERE ROWNUM =1;
但你可以全部使用它:
SELECT c_id, Sum(runs) total
FROM player
GROUP BY c_id
HAVING Sum(runs) = (
SELECT Max(t) from (
SELECT Sum(runs) t
FROM player
GROUP BY c_id))
;