【问题标题】:sql/mysql filter including only the max valuesql/mysql 过滤器仅包括最大值
【发布时间】:2018-08-08 10:38:14
【问题描述】:

我有一个这样的结果集:

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

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

...两次

【问题讨论】:

  • 感谢您的回答,有没有办法通过一次选择来做到这一点?
  • 你到底想要什么? (想重复myvalue 两次还是一次?)
  • 你不能从你的非常长的代码中选择MAX...吗?
  • 我认为不是,但我不确定,我应该如何使用 group by?

标签: mysql sql


【解决方案1】:
SELECT * FROM t WHERE myValue IN (SELECT max(myValue) From t);

###See this SQLFiddle

编辑:

根据discussion with OP. OP 想在 WHERE 子句中使用 alias。但您只能在 GROUP BYORDER BYHAVING 子句中使用列别名。
this answer.

【讨论】:

    【解决方案2】:

    试试这个,

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

    SQLFiddle Demo

    感谢 hiss056 的 DDL

    【讨论】:

    • @toPeerOrNotToPeer 没有。你应该单独计算最大值。
    • 哎哟!,myvalue 实际上是全文搜索中的相关性分数,我不想重复两次......也许可以使用一些自定义函数?顺便说一句,谢谢大家,+1 给每个 1
    【解决方案3】:
    select * 
    from mytable a
    where my_value = (select max(myvalue) from my_table b 
                      --where  b.name = a.name
                      )
    

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

    【讨论】:

      【解决方案4】:
      SELECT 
          *,
          (very long code that returns a integer as relevance score) AS myvalue
      FROM
          mytable
      HAVING
          myvalue = MAX(myvalue)
      

      【讨论】:

        【解决方案5】:

        另一种方法是:

        select * 
        from myTable m1 
        where not exists (select 1 from myTable where myValue > m1.myValue)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多