Reputation: 25
I have two tables on db:
1. memberOne
memberName | gender
===================
Jack | M
Steve | M
Audrey | F
2. memberTwo
memberName | gender
===================
Sarah | F
Steve | M
Audrey | F
Alvin | M
I want to display this view:
Gender | Total
=======================
M | 4
F | 3
I performed this code
SELECT t.Gender, COUNT(t.Gender) Total FROM memberOne t
GROUP BY t.Gender
UNION ALL
SELECT d.Gender, COUNT(d.Gender) Total FROM memberTwo d
GROUP BY d.Gender
;
And this is what I got:
Gender | Total
------------- ----------
M 2
F 1
M 2
F 2
How can I sum the total of M and F from each table? Should I use condition to check the gender? Any helps would be appreciated, thanks.
Upvotes: 1
Views: 6667
Reputation: 802
One way to accomplish your goal working off your initial query would be:
select Gender, sum(Total) Total
From (your existing query) q
group by q.Gender
A different way would be:
select Gender, Count(Gender) Total
from
( select Gender from membeOne
Union all
Select Gender from memberTwo ) q
group by q.Gender
Upvotes: 0
Reputation: 5589
Wrap your last query in another query that sums the count of M and F.
SELECT
G, SUM(Total)
FROM
(SELECT
t.Gender G, COUNT(t.Gender) Total
FROM
memberOne t
GROUP BY
t.Gender
UNION ALL
SELECT
d.Gender G, COUNT(d.Gender) Total
FROM
memberTwo d
GROUP BY
d.Gender)
GROUP BY
gender
Upvotes: 1
Reputation: 1674
SELECT n.Gender, COUNT(n.Gender) Total FROM
(
SELECT t.Gender, COUNT(t.Gender) Total FROM memberOne t
GROUP BY t.Gender
UNION ALL
SELECT d.Gender, COUNT(d.Gender) Total FROM memberTwo d
GROUP BY d.Gender
) n
GROUP BY n.Gender
reiterating select and group by after last query
Upvotes: 0
Reputation: 520968
One approach here would be to union together only the genders from the two tables, and then do a single aggregation to get the male and female counts.
SELECT
gender,
COUNT(*) AS total
FROM
(
SELECT gender
FROM memberOne
UNION ALL
SELECT gender
FROM memberTwo
) t
GROUP BY gender
ORDER BY gender DESC
Demo here:
Upvotes: 1
Reputation: 31397
You need to use UNION ALL
and then apply COUNT
SELECT
gender as Gender,
COUNT(*) as Total
FROM
(
SELECT gender
FROM memberOne
UNION ALL
SELECT gender
FROM memberTwo
) group by gender
Upvotes: 2