Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当同一表中的其他列不具有空值时,查找列的最小值/最大值_Php_Postgresql - Fatal编程技术网

Php 当同一表中的其他列不具有空值时,查找列的最小值/最大值

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 不幸的是,表中有很多空值,分布在所有字段中。为了解决这个问题,我在表单中添加了复选框,允许用户选择是否应在查询中包含/排除空值

我有几个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
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为值为“包括”或“排除”。使用复选框参数设置这些值。让我知道它是否有效。