I have some problem to find median value in mysql.
There are two tables.
TABLE1(ID INT, PRICE1 INT, PRICE2 INT, PRICE3 INT)
TABLE2(ID INT, PRICE1 INT, PRICE2 INT)
I want to sort above table by price3 and I also want to find the median value of it. And I want to move ID, PRICE1, PRICE2 of the recode that have median PRICE3 to another table TABLE2. When the number of recode is even number, I want to choose the smallest value that is more than real median value.
First, I tried below method.
DECLARE midval INT;
DECLARE p1 INT;
DECLARE p2 INT;
SELECT COUNT(*)/2 INTO midval FROM TABLE1;
SELECT PRICE1, PRICE2 INTO p1, p2 FROM TABLE1 ORDER BY PRICE3 LIMIT midval, 1;
UPDATE TABLE2 SET PRICE1 = p1, PRICE2= p2;
But I couldn't work.
I heard about the dynamic query. So, I tried to it. But I couldn't fix the syntax error.
SET @midval = (SELECT COUNT(*)/2 FROM TABLE1);
SET @p1 = 0;
SET @p2 = 0;
SET @sql = N'SELECT PRICE1, PRICE2 INTO @p1, @p2 FROM TABLE1 ORDER BY PRICE3 LIMIT @midnum, 1';
EXEC sp_executesql @sql, N'@p1 INT OUTPUT, @p2 INT OUTPUT, @midval INT', @p1 OUTPUT, @p2 OUTPUT, @midval INT;
So, I tried very simple code of dynamic query. But syntax error is still remained.
DELIMITER //
DROP PROCEDURE IF EXISTS MEDIAN//
CREATE PROCEDURE MEDIAN()
BEGIN
DECLARE @midval VARCHAR(11);
DECLARE @sql NVARCHAR(200);
SET @midval = '0';
SET @sql=' SELECT PRICE1 FROM TABLE1 limit @midval, 1';
EXECUTE sp_executesql @sql, N'@midval VARCHAR(11)', @midval;
RETURN;
END
//
DELIMITER ;
Thank you~!