Weather Observation Station 20

  • + 0 comments

    In SQL Server

    DECLARE @QTD INT, @MEDIAN_INDEX_1 AS INT, @MEDIAN_INDEX_2 AS INT, @MEDIAN_VALUE FLOAT
    
    SET @QTD = (SELECT COUNT(LAT_N) FROM STATION)
    
    IF @QTD % 2 <> 0 
      BEGIN
        SET @MEDIAN_INDEX_1 = (@QTD + 1) / 2
        SET @MEDIAN_INDEX_2 = @MEDIAN_INDEX_1
        SET @MEDIAN_VALUE = (
          SELECT LAT_N FROM (
            SELECT LAT_N, ROW_NUMBER() OVER(ORDER BY LAT_N ASC) AS RN FROM STATION
          ) AS A WHERE RN = @MEDIAN_INDEX_1
        )
      END
    ELSE
      BEGIN
        SET @MEDIAN_INDEX_1 = @QTD / 2
        SET @MEDIAN_INDEX_2 = @MEDIAN_INDEX_1 + 1
        SET @MEDIAN_VALUE = (
          SELECT AVG(LAT_N) FROM (
            SELECT LAT_N, ROW_NUMBER() OVER(ORDER BY LAT_N ASC) AS RN FROM STATION
          ) AS A WHERE RN IN (@MEDIAN_INDEX_1, @MEDIAN_INDEX_2)
        )
      END
    
    SELECT CAST(ROUND(@MEDIAN_VALUE, 4, 0) AS DECIMAL(38, 4))