【问题标题】:MySQL two SELECTS with different conditions in one queryMySQL 在一个查询中具有不同条件的两个 SELECTS
【发布时间】:2017-05-12 07:40:30
【问题描述】:

我已经查看了其他类似性质的问题,但没有找到解决方案。

我有一个查询,在注册过程中获取男性的 SUM 数据,然后获取女性的 SUM 数据。它针对两个表中的相同数据,只是条件不同。这两者如何合二为一?

这是男性的查询:

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'

女性查询:

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'";

谢谢!

【问题讨论】:

标签: mysql


【解决方案1】:

您应该使用条件SUM() 使用CASE 表达式,例如

SUM(case when users.sex = 'male' then signup_data.submited end) AS SubmitedMales,

您的查询应该是

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

【讨论】:

  • 非常感谢!非常有帮助! :)
【解决方案2】:

您可以在聚合函数中使用case 来使用条件聚合:

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;

【讨论】:

    【解决方案3】:
    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-11
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      相关资源
      最近更新 更多