I've looked through the other questions of similar nature without finding a solution.
I have a query that gets SUM data for males and then for females in a signup process. It's targeting the same data in two tables just with a different condition. How can these two be joined into one?
Here's the query for males:
SELECT
SUM(signup_data.submited) AS SubmitedMales,
SUM(signup_data.approved) AS ApprovedMales,
FROM `signup_data`
LEFT JOIN users ON signup_data.user_id = users.user_id
WHERE users.sex = 'male'
The query for females:
SELECT
SUM(signup_data.submited) AS SubmitedFemales,
SUM(signup_data.approved) AS ApprovedFemales,
FROM `signup_data`
LEFT JOIN users ON signup_data.user_id = users.user_id
WHERE users.sex = 'female'";
Thanks!
You should rather use a conditional SUM()
using CASE
expression like
SUM(case when users.sex = 'male' then signup_data.submited end) AS SubmitedMales,
Your query should be
SELECT
SUM(case when users.sex = 'male' then signup_data.submited end) AS SubmitedMales,
SUM(case when users.sex = 'male' then signup_data.approved end) AS ApprovedMales,
SUM(case when users.sex = 'female' then signup_data.submited end) AS SubmitedFemales,
SUM(case when users.sex = 'female' then signup_data.approved end) AS ApprovedFemales,
FROM `signup_data`
LEFT JOIN users ON signup_data.user_id = users.user_id
You can use conditional aggregation using case
inside the aggregate function:
SELECT
SUM(case when users.sex = 'female' then signup_data.submited else 0 end) AS SubmitedFemales,
SUM(case when users.sex = 'female' then signup_data.approved else 0 end) AS ApprovedFemales,
SUM(case when users.sex = 'male' then signup_data.submited else 0 end) AS SubmitedMales,
SUM(case when users.sex = 'male' then signup_data.approved else 0 end) AS ApprovedMales
FROM `signup_data`
LEFT JOIN users ON signup_data.user_id = users.user_id;
SELECT * FROM
(SELECT
SUM(signup_data.submited) AS SubmitedMales,
SUM(signup_data.approved) AS ApprovedMales,
FROM `signup_data`
LEFT JOIN users ON signup_data.user_id = users.user_id
WHERE users.sex = 'male') AS T1
(SELECT
SUM(signup_data.submited) AS SubmitedFemales,
SUM(signup_data.approved) AS ApprovedFemales,
FROM `signup_data`
LEFT JOIN users ON signup_data.user_id = users.user_id
WHERE users.sex = 'female') AS T2
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.