SQL:根据其他列的值选择一列中的项目

时间:2018-02-22 17:03:32

标签: mysql sql

我有一个看起来像这样的表:

+-----+----+
|A    |B   |
+-----+----+
|    1|   0|
|    2|   1|
|    2|   1|
|    2|   1|
|    2|   2|
|    3|   1|
|    4|   1|
|    5|   1|
|    5|   2|
|    6|   2|
|    7|   2|
|    8|   2|
+-----+----+

我想选择A的值,其中B的值最低。但是想要保持重复。假设我有3对(4,5),(4,5),(4,6),我希望结果为(4,5),(4,5)。

对于上表,我希望输出为

+-----+----+
|A    |B   |
+-----+----+
|    1|   0|
|    2|   1|
|    2|   1|
|    2|   1|
|    3|   1|
|    4|   1|
|    5|   1|
|    6|   2|
|    7|   2|
|    8|   2|
+-----+----+

我试图做这样的事情,但我迷路了!

SELECT t1.A, t1.B from table t1 JOIN table t2
WHERE t1.B >= t2.B
ORDER BY B DESC

任何潜在客户都赞赏!

3 个答案:

答案 0 :(得分:1)

这应该有效:

select t1.* from mytable t1
join
    (select A, min(B) as B from mytable group by A) t2
on t1.A = t2.A and t1.B = t2.B

答案 1 :(得分:0)

SELECT
a.A, a.B
FROM table1 a WHERE B=(select MIN(b) FROM table1)
ORDER BY B DESC

答案 2 :(得分:0)

您可以使用子查询。首先确定满足条件的所有列。然后使用where过滤掉记录。

select A,B from(
        select A,B, case when B<A then 'Y' else 'N' end as C from table)
        where C = 'Y'