Solved

calculate Median sql 2012

Posted on 2014-02-06
2
464 Views
Last Modified: 2014-02-20
I need to calculate the Median of quotes based on BusinessUnit, and can't figure out why the following  code are not working:

;with QuoteCount as
(
SELECT
BusinessUnit,    
FullName,
CAST(DATEDIFF(dd, 0,  CreatedOn) AS datetime) as CreatedOn,
Count( QuoteId) as Quotes
FROM        
      quote  
WHERE
       BusinessUnit IN (@BusinessUnit)
      AND (CAST(DATEDIFF(dd, 0, CreatedOn) AS datetime) BETWEEN @StartDate AND @EndDate)
GROUP BY
      BusinessUnit,
      FullName,
      CAST(DATEDIFF(dd, 0,  CreatedOn) AS datetime)
)

,Median_all as
(
SELECT DISTINCT BusinessUnit, Quotes,
    PERCENTILE_CONT(0.5)
        WITHIN GROUP (ORDER BY Quotes)
        OVER (PARTITION BY BusinessUnit) AS MedianContAll
FROM QuoteCount
WHERE @BusinessUnit= null
ORDER BY BusinessUnit DESC
)

,Median as
(
SELECT DISTINCT  BusinessUnit, Quotes,
    PERCENTILE_CONT(0.5)
        WITHIN GROUP (ORDER BY Quotes)
        OVER (PARTITION BY BusinessUnit) AS MedianCont
FROM QuoteCount
WHERE BusinessUnit in (@BusinessUnit)
ORDER BY BusinessUnit DESC
)
select
qc.BusinessUnit,
qc.fullname,
qc.CreatedOn,
sum(qc.Quotes) as Quotes,
max(m.MedianCont) as MedianCont,
max(ma.MedianContAll ) as MedianContAll
from
      Median_all ma  
         inner join Median m  on m.BusinessUnit=ma.BusinessUnit
      inner join QuoteCount qc on ma.BusinessUnit=qc.BusinessUnit
group by
qc.BusinessUnit,
qc.fullname,
qc.CreatedOn
order by
qc.BusinessUnit,
qc.fullname,
qc.CreatedOn

Thank you in advance.
0
Comment
Question by:sharon2011
2 Comments
 
LVL 59

Accepted Solution

by:
Kevin Cross earned 500 total points
ID: 39839619
Probably because of the "@BusinessUnit = NULL" - if you are partitioning by BusinessUnit, you do not need two CTEs.  If your intent is to get the median for everything when @BusinessUnit is NULL, you still can do this with one query.  Can you provide a table creation script and some sample data along with expected results.

In the interim, here is an example of how the median works, explaining the difference between the two new functions in SQL 2012:
http://nobrainerlab.com/2013/05/17/statistical-median-with-t-sql-2012/
http://technet.microsoft.com/en-us/library/hh231473.aspx
0
 

Author Comment

by:sharon2011
ID: 39874562
Kevin Cross,

Sorry for the delayed response. I removed the @BusinessUnit = Null. Instead Union all the query with all BusinessUnit. Then use the following code:

, ALLBUROWNum as
(
select grp,  cnt, ROW_NUMBER() over (order by  cnt) as n
from AllBUWeightCount

)

,findALLBUMedian as
(
select ceiling(max(n)/2.0) as n
from ALLBUROWNum
union all
select ceiling(max(n)/2.0)+1 as n
from ALLBUROWNum
having max(n) % 2 = 0
)

, AllBUMedian as
(
SELECT C.grp, AVG(1. * c.cnt) AS AllBUMedian
FROM ALLBUROWNum AS C
INNER JOIN findALLBUMedian AS f
on C.n = f.n
GROUP BY C.grp
)


Thank you so much for your immediate assistance.
0

Featured Post

Best Practices: Disaster Recovery Testing

Besides backup, any IT division should have a disaster recovery plan. You will find a few tips below relating to the development of such a plan and to what issues one should pay special attention in the course of backup planning.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Database Integrity 1 48
Acces SQL Insert Problem 6 31
SQL Quer 4 21
Substring works but need to tweak it 12 6
Occasionally there is a need to clean table columns, especially if you have inherited legacy data. There are obviously many ways to accomplish that, including elaborate UPDATE queries with anywhere from one to numerous REPLACE functions (even within…
This article shows gives you an overview on SQL Server 2016 row level security. You will also get to know the usages of row-level-security and how it works
Familiarize people with the process of utilizing SQL Server functions from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Ac…
Via a live example combined with referencing Books Online, show some of the information that can be extracted from the Catalog Views in SQL Server.

809 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question