像COALESCE这样的复杂查询?

问题描述

假设我有一个table1:

column1|column2|state|
-------|-------|-----|
test1  |      2|    0|
test1  |      3|    0|
test1  |      1|    1|
test2  |      2|    1|
test2  |      1|    2|

我想选择(实际上是删除,但我使用select进行测试)所有不具有唯一column1的列,并且不仅选择(实际上保留)具有以下内容的行:

  1. 状态= 0,第2列中的最小值,
  2. 如果不存在状态= 0的行,则该列在column2中只有最小值。

所以选择结果应该是:

column1|column2|state|
-------|-------|-----|
test1  |      3|    0|
test1  |      1|    1|
test2  |      2|    1|

,保留的行(在删除的情况下)应为:

column1|column2|state|
-------|-------|-----|
test1  |      2|    0|
test2  |      1|    2|

我尝试通过以下方法实现此目标(无效):

SELECT * FROM table1 AS result1
    WHERE
        result1.column1 IN
        (SELECT
            result2.column1
        FROM
            table1 AS result2
        WHERE /*part that works*/)
    AND
        result1.column2 >
        (SELECT
            min(result3.column2)
        FROM
            table1 AS result3
        WHERE (COALESCE(
            result3.column1 = result1.column1 
        AND
            result3.state = 0,WHERE
            result3.column1 = result1.column1 
        )))

我不知道的部分位于result1.column2 >后面。
我想将result1.column2

的结果进行比较
  1. 结果集中的最小值,其中it3.state = 0
  2. 如果1.不存在,则具有类似结果集中的最小值,且没有it3.state = 0条件。

那是我的问题,我希望这是有道理的。也许可以用更高效/更整洁的方式完全重写它。
您能帮我解决查询吗?

解决方法

这是您想要的吗?

SELECT
        *
  FROM
        table1 AS result1
 WHERE
        result1.column1 IN (SELECT result2.column1
                              FROM table1 AS result2
                             WHERE /*part that works*/)
   AND  result1.column2 > COALESCE( ( SELECT min(result3.column2)
                                        FROM table1 AS result3
                                       WHERE result3.column1 = result1.column1 
                                         AND result3.state = 0 ),( SELECT min(result3.column2)
                                        FROM table1 AS result3
                                       WHERE result3.column1 = result1.column1  )
                                  )

;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...