I have the following scenario
SELECT
...
...
(
@var1 = MAX(IF(table1.name='Mod', table1.value, NULL))
@var2 = MAX(IF(table1.name='Man', table1.value, NULL))
CASE
WHEN @var1 IS NOT NULL && @var2 IS NOT NULL THEN @var1+"/"+@var2
WHEN @var1 IS NULL && @var2 IS NOT NULL THEN @var2
WHEN @var1 IS NOT NULL && @var2 IS NULL THEN @var1
ELSE NULL
END) AS "col44",
This is throwing me an exception in the mysql console.
Can't we do a variable assignment in the general mysql select query?
What about this?
SELECT ...
, @var1 = MAX(IF(table1.name='Mod', table1.value, NULL))
, @var2 = MAX(IF(table1.name='Man', table1.value, NULL))
, CASE
WHEN @var1 IS NOT NULL && @var2 IS NOT NULL THEN @var1+"/"+@var2
WHEN @var1 IS NULL && @var2 IS NOT NULL THEN @var2
WHEN @var1 IS NOT NULL && @var2 IS NULL THEN @var1
ELSE NULL
END AS "col44"
Note the addition of commas, and removal of parenthesis.
Alternatively, you could just use a subquery. (In my experience, variables in queries can become unpredictable when used in conjunction with aggregation; this avoids the variables altogether).
SELECT ...
, CASE
WHEN modMax IS NOT NULL && manMax IS NOT NULL THEN modMax+"/"+manMax
WHEN modMax IS NULL && manMax IS NOT NULL THEN manMax
WHEN modMax IS NOT NULL && manMax IS NULL THEN modMax
ELSE NULL
END AS "col44"
FROM (
SELECT ...
, MAX(IF(table1.name='Mod', table1.value, NULL)) AS modMax
, MAX(IF(table1.name='Man', table1.value, NULL)) AS manMax
...
) AS subQ
Additional note: Watch out for modMax+"/"+manMax; it may end up giving you an integer calculated from modMax+0+manMax, instead of a string.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With