¿Hay alguna manera de hacer que el caso cuando se prueba uno de los resultados en lugar de ejecutarlo dos veces?
-
21-08-2019 - |
Pregunta
¿Hay una manera de utilizar el valor de la caja cuando la prueba como uno de sus resultados sin tener que escribir la instrucción de selección dos veces (ya que podría ser largo y desordenado)? Por ejemplo:
SELECT id,
CASE WHEN (
(SELECT MAX(value) FROM my_table WHERE other_value = 1) IS NOT NULL
)
THEN (
SELECT (MAX(value) FROM my_table WHERE other_value = 1
)
ELSE 0
END AS max_value
FROM other_table
¿Hay alguna manera de utilizar el resultado de la primera ejecución de la instrucción SELECT (para la prueba) como el valor ENTONCES así? He intentado utilizar "AS MAX_VALUE" después de la primera SELECT pero me dio un error de SQL.
Actualizar : Vaya, como Tom H. señaló, se me olvidó el "no es nulo" en mi pregunta original
.Solución
Este ejemplo muestra cómo se puede preparar un grupo de valores en una subconsulta, y utilizarlos en un caso en el SELECT externa.
select
orderid,
case when maxprice is null then 0 else maxprice end as maxprice
from (
select
orderid = o.id,
maxprice = (select MAX(price) from orderlines ol
where ol.orderid = o.id)
from orders o
) sub
No estoy seguro si eso es lo que está buscando, la pregunta no es clara (por ejemplo, el 2 MAX () consultas parecen ser copias exactas.)
Otros consejos
¿Su declaración aún funciona? No es una expresión booleana en su sentencia CASE. Lo hace por defecto de MySQL para la comprobación de valor nulo si no se utiliza un valor lógico?
Creo que esto es probablemente lo que usted está buscando:
SELECT
id,
COALESCE(
(
SELECT
MAX(value)
FROM
My_Table
WHERE
other_value = 1
), 0) AS max_value
FROM
Other_Table