Задавайте вопросы, мы ответим
Вы не зашли.
Есть така задача. - для таблицы(T) из 2х столбцов (a и b) получить максимальное значение в каждой строке.
Неактивен
Можно сделать через IF.
Неактивен
Неактивен
rgbeast написал:
Можно сделать через IF.
SELECT v FROM (SELECT @t1:=IF(a>b,a,b), @t2:=IF(c>d,c,d), @t3:=IF(@t2>@t1,@t2,@t1), IF(e>@t3,e,@t3) AS v FROM T) AS t1;
На таком тесте проходит только со второй попытки:
mysql> create table t_4235(a int, b int ,c int,d int,e int);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t_4235 values(10,8,7,9,6);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT v FROM (SELECT @t1:=IF(a>b,a,b), @t2:=IF(c>d,c,d), @t3:=IF(@t2>@t1,@t2,@t1), IF(e>@t3,e,@t3) AS v FROM t_4235) AS t1;
+------+
| v |
+------+
| 9 |
+------+
1 row in set (0.00 sec)
mysql> SELECT v FROM (SELECT @t1:=IF(a>b,a,b), @t2:=IF(c>d,c,d), @t3:=IF(@t2>@t1,@t2,@t1), IF(e>@t3,e,@t3) AS v FROM t_4235) AS t1;
+------+
| v |
+------+
| 10 |
+------+
1 row in set (0.00 sec)
В то же время, если инициализировать ПП заранее (перед запросом, тем самым задав тип), то нормально.
mysql> create table t_4235(a int, b int ,c int,d int,e int);
Query OK, 0 rows affected (0.00 sec)
mysql> insert into t_4235 values(10,8,7,9,6);
Query OK, 1 row affected (0.00 sec)
mysql> set @t1=0,@t2=0,@t3=0;SELECT v FROM (SELECT @t1:=IF(a>b,a,b), @t2:=IF(c>d,c,d), @t3:=IF(@t2>@t1,@t2,@t1), IF(e>@t3,e,@t3) AS v FROM t_4235) AS t1;
Query OK, 0 rows affected (0.00 sec)
+------+
| v |
+------+
| 10 |
+------+
1 row in set (0.00 sec)
Неактивен
На dev.mysql.com отписали вот что.
Так что нужно определить тип переменной до запроса.
Отредактированно deadka (07.06.2011 22:07:49)
Неактивен