Php 当同一表中的其他列不具有空值时,查找列的最小值/最大值
我有几个Postgres SELECT查询,这些查询是通过PHP根据表单输入拼凑起来的。其中一个是SELECT查询,它查找每个字段中的最小值(我还有一个查找最大值的查询) e、 g.对于最小值:Php 当同一表中的其他列不具有空值时,查找列的最小值/最大值,php,postgresql,Php,Postgresql,我有几个Postgres SELECT查询,这些查询是通过PHP根据表单输入拼凑起来的。其中一个是SELECT查询,它查找每个字段中的最小值(我还有一个查找最大值的查询) e、 g.对于最小值: SELECT MIN(col1) "Min_col1" MIN(col2) "Min_col2" MIN(col3) "Min_col3" FROM table 不幸的是,表中有很多空值,分布在所有字段中。为了解决这个问题,我在表单中添加了复选框,允许用户选择是否应在查询中包含/排除空值
SELECT
MIN(col1) "Min_col1"
MIN(col2) "Min_col2"
MIN(col3) "Min_col3"
FROM table
不幸的是,表中有很多空值,分布在所有字段中。为了解决这个问题,我在表单中添加了复选框,允许用户选择是否应在查询中包含/排除空值
例如,如果用户希望为所有列包含空值:
SELECT
MIN(col1) "Min_col1"
MIN(col2) "Min_col2"
MIN(col3) "Min_col3"
FROM table
WHERE
(col1 IS NULL) AND
(col2 IS NULL) AND
(col3 IS NULL)
但是,由于每个字段至少有一个空值,上述查询将返回所有空值
相反,我希望能够检索每个字段的MIN,同时包括/排除其他字段的NULL值。e、 g.最小值(col1),同时包括/不包括col2、col2和col3等的空值
最简单的方法是什么?请记住,查询是通过PHP从表单输入组合在一起的,因此希望尽可能将其模块化…如果要确保值不为null,请使用coalesce(columnName,valueToBeUsed)。因此,在您的示例中,您可能希望使用
MIN(coalesce(col1,0))
如果您希望确保值不为null,则使用coalesce(columnName,valueToBeUsed)。因此,在您的示例中,您可能希望在下面的查询中使用MIN(coalesce(col1,0))
如果null\u only::boolean为false,则返回MIN,否则为null:
SELECT
case when not null_only then MIN(col1) else null end "Min_col1"
, case when not null_only then MIN(col2) else null end "Min_col2"
, case when not null_only then MIN(col3) else null end "Min_col3"
FROM table
WHERE
(col1 IS NULL) AND
(col2 IS NULL) AND
(col3 IS NULL)
下面是准备好的语句的工作示例:
t=# prepare q1 (boolean) as select case when not $1 then MIN(oid) else null end col1 from pg_class;
PREPARE
Time: 10.905 ms
t=# execute q1(true);
col1
------
(1 row)
Time: 6.216 ms
t=# execute q1(false);
col1
------
112
(1 row)
Time: 7.169 ms
对于下面的查询,如果null_only::boolean为false,则返回min,否则返回null:
SELECT
case when not null_only then MIN(col1) else null end "Min_col1"
, case when not null_only then MIN(col2) else null end "Min_col2"
, case when not null_only then MIN(col3) else null end "Min_col3"
FROM table
WHERE
(col1 IS NULL) AND
(col2 IS NULL) AND
(col3 IS NULL)
下面是准备好的语句的工作示例:
t=# prepare q1 (boolean) as select case when not $1 then MIN(oid) else null end col1 from pg_class;
PREPARE
Time: 10.905 ms
t=# execute q1(true);
col1
------
(1 row)
Time: 6.216 ms
t=# execute q1(false);
col1
------
112
(1 row)
Time: 7.169 ms
请检查此项-帮助:从{parameter}值为“Include”或“Exclude”的表中选择min(当“Include”={parameter}时选择case,当col1为空时选择case,当col1为空时选择case,当col1为0时选择case,当“Include”={parameter}时选择case,当“Include”或“Exclude”时选择case)。使用复选框参数设置这些值。请让我知道它是否工作。您能检查一下吗?这很有帮助:从{parameter}所在的_表中选择min(当'Include'={parameter}时选择case,当col1为空时选择case,当'Include'={parameter}时选择case,当'Include'={parameter}时选择case,当col1为空时选择case,当col1结束时选择0),min(当'Include'={parameter}时选择case,当col2为值为“包括”或“排除”。使用复选框参数设置这些值。让我知道它是否有效。