April 24, 2020 at 6:34 pm
Hi, I'm trying to find the percentage of a column but I'm not sure how to get the percentage correct. The attachment is how I'm getting the "Have" part.
I've tried adding this column but when I do a group by rollup it does the percentage on the overall total and not by county total.
select active_members/(select sum(active_members from counts) as percentage
April 24, 2020 at 7:15 pm
Makes it a lot easier to help if you post consumable data in the form of CREATE TABLE scripts...
use tempdb;
go
CREATE TABLE #SampleData (
County VARCHAR(12) NOT NULL,
Gender CHAR NOT NULL,
ActiveMembers INT NOT NULL);
GO
INSERT INTO #SampleData VALUES
('Butler', 'F', 13086)
,('Butler', 'M', 11165)
,('Butler', 'U', 16)
,('Lawrence', 'F', 11464)
,('Lawrence', 'M', 9471)
,('Lawrence', 'U', 16)
,('Washington', 'F', 19984)
,('Washington', 'M', 16684)
,('Washington', 'U', 16);
It's easy if you use a windowing function to get the total population of each county:
SELECT County
, Gender
, ActiveMembers
, CountyPopulation = SUM(ActiveMembers) OVER (PARTITION BY County)
, PctCountyPopulation = ActiveMembers/(1.0* SUM(ActiveMembers) OVER (PARTITION BY County))
FROM #SampleData;
April 24, 2020 at 7:25 pm
Thanks. Is there a way for the total to not be in a separate column and be in the count column instead?
April 24, 2020 at 8:20 pm
Maybe this one is better?
SELECT x.County
, x.Gender
, x.Members
, y.TotalMembership
, RelPct = CASE WHEN Gender IS NULL THEN NULL ELSE x.Members/(1.0 * y.TotalMembership) END
FROM
(
SELECT
County
,Gender
,members = SUM(ActiveMembers)
FROM
#SampleData
GROUP BY
GROUPING SETS (
(County),
(County, Gender),
()
)) x
INNER JOIN (
SELECT County
, TotalMembership = SUM(ActiveMembers)
FROM #SampleData
GROUP BY County ) y ON x.County = y.County
Viewing 4 posts - 1 through 3 (of 3 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy