我有一些问题需要在mysql中找到中值。
有两张桌子。
TABLE1(ID INT, PRICE1 INT, PRICE2 INT, PRICE3 INT)
TABLE2(ID INT, PRICE1 INT, PRICE2 INT)
我想按price3对表格进行排序,我也希望找到它的中值。 我想将具有中值PRICE3的重新编码的ID,PRICE1,PRICE2移动到另一个表TABLE2。 当重新编码的数量是偶数时,我想选择一个大于实际中值的最小值。
首先,我尝试了下面的方法。
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;
但我无法工作。
我听说过动态查询。所以,我试过了。但我无法解决语法错误。
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;
所以,我尝试了非常简单的动态查询代码。但语法错误仍然存在。
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 ;
谢谢〜!