6

我有一个这样的结果集:

ID | name  | myvalue
 1 | A1    | 22
 2 | A2    | 22
 3 | A3    | 21
 4 | A4    | 33
 5 | A5    | 33
 6 | A6    | 10
 7 | A7    | 10
 8 | A8    | 10
 9 | A9    | 5

我想要的是仅包含包含最高可用“myvalue”的行(在前面的示例中为 33),然后:

ID | name  | myvalue
 4 | A4    | 33
 5 | A5    | 33

IE 查询应该选择可用的最高“myvalue”(IE 33),它应该删除 myvalue < 33 的行

SELECT ..... WHERE myvalue = THE_HIGHEST_OF(myvalue)

希望清楚...

先感谢您


编辑:

我目前的查询是

SELECT 
    *,
    (very long code that returns a integer as relevance score) AS myvalue
FROM
    mytable
HAVING
    myvalue = ?????
ORDER BY
    myvalue DESC

现在最高的 myvalue 可以是 10、20、30,任何数字......在最终结果集中,我只想包含具有最高相关性分数的行

我尝试使用 GROUP BY,但我总是需要重复...

    (very long code that returns a integer as relevance score) AS myvalue

...两次

4

5 回答 5

13
SELECT * FROM t WHERE myValue IN (SELECT max(myValue) From t);

###看到这个 SQLFiddle

编辑:

根据与 OP 的讨论。 OP 想在子句中使用别名。WHERE但是您只能在 、 或 子句中使用GROUP BYORDER BY别名HAVING
看看这个答案。

于 2012-09-04T05:38:00.013 回答
5

试试这个,

SELECT  *
FROM    tableName
WHERE   myValue = (SELECT max(myValue) From tableName)

SQLFiddle 演示

感谢 hiss056 的 DDL

于 2012-09-04T05:30:19.867 回答
3
select * 
from mytable a
where my_value = (select max(myvalue) from my_table b 
                  --where  b.name = a.name
                  )

(如果您使用注释代码,将获得每个名称的最大值:))

于 2012-09-04T05:31:20.817 回答
3
SELECT 
    *,
    (very long code that returns a integer as relevance score) AS myvalue
FROM
    mytable
HAVING
    myvalue = MAX(myvalue)
于 2013-07-25T10:48:10.950 回答
1

另一种方法是:

select * 
from myTable m1 
where not exists (select 1 from myTable where myValue > m1.myValue)
于 2012-09-04T05:34:27.273 回答