Skip to main content
added 13 characters in body
Source Link

Using a single statement - One way is to use ROW_NUMBER(), COUNT() window function and filter usingthe sub-query. Here is to find the median salary:

 SELECT AVG(a.Salarye_salary) 
 FROM                                                             
    (SELECT 
      ROW_NUMBER() OVER(ORDER BY Salarye_salary) as row_no, Salary 
 FROM Employee)a
CROSS JOIN   e_salary,
(SELECT      (COUNT(*) OVER()+1)*0.5 AS row_half
     FROM Employee ) t
 WHERE a.row_no IN (FLOOR(t.row_half),CEILING(t.row_half))

I have seen similar solutions over the net using FLOOR and CEILING but tried to use a single statement. (edited)

Using a single statement - One way is to use ROW_NUMBER() and filter using sub-query. Here is to find the median salary:

SELECT AVG(a.Salary) FROM                                                             
(SELECT ROW_NUMBER() OVER(ORDER BY Salary) as row_no, Salary FROM Employee)a
CROSS JOIN
(SELECT (COUNT(*)+1)*0.5 AS row_half FROM Employee )t
WHERE a.row_no IN (FLOOR(t.row_half),CEILING(t.row_half))

I have seen similar solutions over the net using FLOOR and CEILING but tried to use a single statement.

Using a single statement - One way is to use ROW_NUMBER(), COUNT() window function and filter the sub-query. Here is to find the median salary:

 SELECT AVG(e_salary) 
 FROM                                                             
    (SELECT 
      ROW_NUMBER() OVER(ORDER BY e_salary) as row_no,  
      e_salary,
      (COUNT(*) OVER()+1)*0.5 AS row_half
     FROM Employee) t
 WHERE row_no IN (FLOOR(row_half),CEILING(row_half))

I have seen similar solutions over the net using FLOOR and CEILING but tried to use a single statement. (edited)

added 81 characters in body
Source Link

Using a single statement - One way is to use ROW_NUMBER() and filter using sub-query. Here is to find the median salary:

SELECT AVG(a.Salary) FROM (SELECT ROW_NUMBER() OVER(ORDER BY Salary) as row_no, Salary FROM Employee)a CROSS JOIN (SELECT (COUNT(*)+1)*0.5 AS row_half FROM Employee )t WHERE a.row_no IN (FLOOR(t.row_half),CEILING(t.row_half))

SELECT AVG(a.Salary) FROM                                                             
(SELECT ROW_NUMBER() OVER(ORDER BY Salary) as row_no, Salary FROM Employee)a
CROSS JOIN
(SELECT (COUNT(*)+1)*0.5 AS row_half FROM Employee )t
WHERE a.row_no IN (FLOOR(t.row_half),CEILING(t.row_half))

I have seen similar solutions over the net using FLOOR and CEILING but tried to use a single statement.

Using a single statement - One way is to use ROW_NUMBER() and filter using sub-query. Here is to find the median salary:

SELECT AVG(a.Salary) FROM (SELECT ROW_NUMBER() OVER(ORDER BY Salary) as row_no, Salary FROM Employee)a CROSS JOIN (SELECT (COUNT(*)+1)*0.5 AS row_half FROM Employee )t WHERE a.row_no IN (FLOOR(t.row_half),CEILING(t.row_half))

I have seen similar solutions over the net using FLOOR and CEILING but tried to use a single statement.

Using a single statement - One way is to use ROW_NUMBER() and filter using sub-query. Here is to find the median salary:

SELECT AVG(a.Salary) FROM                                                             
(SELECT ROW_NUMBER() OVER(ORDER BY Salary) as row_no, Salary FROM Employee)a
CROSS JOIN
(SELECT (COUNT(*)+1)*0.5 AS row_half FROM Employee )t
WHERE a.row_no IN (FLOOR(t.row_half),CEILING(t.row_half))

I have seen similar solutions over the net using FLOOR and CEILING but tried to use a single statement.

Source Link

Using a single statement - One way is to use ROW_NUMBER() and filter using sub-query. Here is to find the median salary:

SELECT AVG(a.Salary) FROM (SELECT ROW_NUMBER() OVER(ORDER BY Salary) as row_no, Salary FROM Employee)a CROSS JOIN (SELECT (COUNT(*)+1)*0.5 AS row_half FROM Employee )t WHERE a.row_no IN (FLOOR(t.row_half),CEILING(t.row_half))

I have seen similar solutions over the net using FLOOR and CEILING but tried to use a single statement.