【问题标题】:MySQL - What's the best way to perform this operationMySQL - 执行此操作的最佳方法是什么
【发布时间】:2012-10-02 18:35:22
【问题描述】:

我有一张这样的桌子:

| ID | value |
|  0 |   5   |
|  1 |   2   |
|  0 |   1   |
|  1 |   6   |
|  2 |   3   |
|  2 |   8   |
|  1 |   2   |
|  0 |   1   |
|  2 |   4   |

我试图将我的结果只纳入 id 的一行,其中 value 是所有列的最小值,类似于:

SELECT DISTINCT * FROM table WHERE MIN(table.value) = table.value

我该如何解决?谢谢!

编辑:

我想要的输出是:

| ID | value |
|  0 |   1   | -> is the min of all the rows with id = 0
|  1 |   2   |
|  2 |   3   |

编辑 2:

类似:

SELECT DISTINCT *
FROM tableName AS A
WHERE value = (SELECT MIN(value) From tableName AS B WHERE A.ID=B.ID)

但是tableName是(SELECT * FROM ...........)..我该怎么做呢?

【问题讨论】:

    标签: mysql select distinct min


    【解决方案1】:
    SELECT DISTINCT ID, Value
    FROM tableName
    WHERE value = (SELECT MIN(value) From tableName)
    

    SQLFiddle Demo

    后续问题,如果最低的value与不同的ID相同,会出现什么记录?

    【讨论】:

    • 对不起,伙计..这样,它只给了我一行,取所有表中具有最小值的 id..我需要为每个 id 取 id 组的最小值..像.. id = 0 = >row = 3. 取 id = 0 其中 row = min(row)。 id = 1 = >row = 6. 取 id=1 where row = min(row)
    • 我明白了,我对这个 only ONE ROW for id where value is the min of ALL the column 感到困惑。我会更新答案。
    • @JackTurky 你能在你的问题上发布你想要的输出吗?
    • ok 更新了我的问题.. 抱歉,我的英语不是很好(如您所见):)
    【解决方案2】:

    这个怎么样:

    SELECT DISTINCT a.ID, a.value
    FROM tableName AS a
    WHERE a.value = (SELECT MIN(b.value)
                     FROM tableName AS b
                     WHERE a.id = b.id)
    

    【讨论】:

    • 如果我的 tableName 是另一个子查询的结果?
    • 只需将 tableName 替换为 (select from ... ) 并包含括号
    【解决方案3】:

    这就是你想要的

    select id,min(value) from tableName group by id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多