如何在mysql中找到中值?

时间:2015-12-05 18:07:39

标签: mysql dynamic median

我有一些问题需要在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 ;

谢谢〜!

0 个答案:

没有答案