【问题标题】:How to write this MySQL Query?如何编写这个 MySQL 查询?
【发布时间】:2011-09-13 21:00:02
【问题描述】:

假设我有一个包含三个整数字段和一个字符串字段(只是数据)的表。

例如它看起来像:

Id      Category    Value   Data
1       1           3       ...
2       1           4       ...
3       2           2       ...
4       2           4       ...
5       3           5       ...
6       3           6       ...
7       3           2       ...
8       4           1       ...

我想要做的是对于每个Category,在结果集中包含具有最小Value 字段的行。在这种情况下,它将返回:

Id      Category    Value   Data
1       1           3       ...
3       2           2       ...
7       3           2       ...
8       4           1       ...

这样的查询怎么写?

谢谢!

【问题讨论】:

  • 到目前为止您尝试过什么?您是否尝试过使用GROUP BY 子句和MIN 子句?
  • 他还要求提供 ID,但 GROUP BY 和 MIN 不会返回。 javic 你想如何解决关系,例如如果有两行类别 1 值为 3?显示他们两个?只显示其中之一?哪个?
  • 哦,你可以假设不会有平局。不会有两行具有相同的类别 AND 值。谢谢。

标签: mysql sql logic minimum


【解决方案1】:
select T1.Id,
       T1.Category,
       T1.Value,
       T1.Data
from YourTable as T1
  inner join (
               select Category,
                      min(Value) as Value
               from YourTable
               group by Category
             ) as T2
    on T1.Category = T2.Category and
       T1.Value = T2.Value

【讨论】:

    【解决方案2】:
    select *
    from mytable t
    join (select category, min(value) as value from mytable group by 1) x
        on t.value = x.value and t.category = x.category
    

    内部选择获取最终结果所需的类别和值,然后您连接回主表以获取所有列。

    【讨论】:

    • 好的,谢谢!这看起来很完美。不确定性能,但我并不渴望在这个问题上的性能。
    【解决方案3】:
    SELECT category, MIN(value) as Value
    FROM table
    GROUP BY category
    

    使用MIN 函数和GROUP BY 类别列上的结果。

    【讨论】:

    • 是的.. 我不仅需要获取最小值,还需要获取行。感谢您的尝试:)
    猜你喜欢
    • 2014-07-27
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    相关资源
    最近更新 更多