带SELECT MAX的Sql-子查询

时间:2018-01-08 20:32:21

标签: sql

我有这个代码,但我需要的是“n_vezes_ganhas”的MAX。这段代码显示了谁占据了第一名和多少次,但我想要的是看谁是第一次。

SELECT (remadores.nome) AS remador, (regata.nome) AS regata, 
       COUNT(remadores.cod_remador) AS n_vezes_ganhas
FROM remadores,
     resultados,
     prova,
     regata
WHERE remadores.cod_remador = resultados.cod_remador
  AND resultados.cod_resultado = prova.cod_resultado
  AND prova.cod_regata = regata.cod_regata
  AND resultados.posição = 1  
GROUP BY remadores.nome 

4 个答案:

答案 0 :(得分:0)

试试这个:

它对查询进行子查询并获取计算列的最大值。

SELECT MAX(c.n_vezes_ganhas) n_vezes_ganhas
FROM
(
SELECT (remadores.nome) AS remador, (regata.nome)AS regata, 
    COUNT(remadores.cod_remador) AS n_vezes_ganhas
    FROM remadores,resultados,prova,regata
    WHERE remadores.cod_remador=resultados.cod_remador
    AND resultados.cod_resultado= prova.cod_resultado
    AND prova.cod_regata=regata.cod_regata
    AND resultados.posição = 1
    GROUP BY remadores.nome
) c

答案 1 :(得分:0)

一种解决方案是使用ALL

SELECT (remadores.nome) AS remador, 
  (regata.nome)AS regata, 
  COUNT(remadores.cod_remador) AS n_vezes_ganhas
FROM remadores,resultados,prova,regata
WHERE remadores.cod_remador=resultados.cod_remador
  AND resultados.cod_resultado= prova.cod_resultado
  AND prova.cod_regata=regata.cod_regata
  AND resultados.posição = 1
GROUP BY remadores.nome
HAVING COUNT(remadores.cod_remador) >= ALL (
  SELECT COUNT(remadores.cod_remador) AS n_vezes_ganhas
  FROM remadores,resultados,prova,regata
  WHERE remadores.cod_remador=resultados.cod_remador
    AND resultados.cod_resultado= prova.cod_resultado
    AND prova.cod_regata=regata.cod_regata
    AND resultados.posição = 1
  GROUP BY remadores.nome
)

答案 2 :(得分:0)

据我所知,只需要对结果进行排序,如果您只想获得最高奖金,您还可以添加TOP 1:

SELECT TOP 1 (remadores.nome) AS remador, (regata.nome)AS regata, 
      COUNT(remadores.cod_remador) AS n_vezes_ganhas
FROM remadores,resultados,prova,regata
WHERE remadores.cod_remador=resultados.cod_remador
      AND resultados.cod_resultado= prova.cod_resultado
      AND prova.cod_regata=regata.cod_regata
      AND resultados.posição = 1  
GROUP BY remadores.nome   
ORDER BY n_vezes_ganhas DESC

答案 3 :(得分:0)

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

然后,您的问题的答案是ORDER BY,可以通过某种方式获取第一行。 ANSI标准方法是:

SELECT rem.nome AS remador, reg.nome AS regata, 
       COUNT(rem.cod_remador) AS n_vezes_ganhas
FROM remadores rem JOIN
     resultados res
     ON rem.cod_remador = res.cod_remador JOIN
     prova p
     ON res.cod_resultado = p.cod_resultado JOIN
     regata reg
     ON p.cod_regata = reg.cod_regata
WHERE res.posição = 1  
GROUP BY rem.nome 
ORDER BY n_vezes_ganhas
FETCH FIRST 1 ROW ONLY;

请注意表别名和限定列名的使用。这些使查询更容易阅读和写入。