【问题标题】:How can you have two COUNT queries GROUPED BY the same column in SQL?如何在 SQL 中对同一列进行 GROUPED 的两个 COUNT 查询?
【发布时间】:2016-10-24 04:57:13
【问题描述】:

我有两张表,一张名为Employees,一张名为Shop。 Employees 表包含所有员工的性别,而 Shop 表包含每个员工工作的商店的名称。

我需要计算男性和女性员工的数量,并按他们工作的商店对他们进行分组。例如,想要的结果如下所示:

FemaleEmployees MaleEmployees Store 1 2 Ed's Hardware 3 4 Grocery store

到目前为止,我有这个:

SELECT COUNT(Gender) AS FemaleEmployees, StoreName AS Store
FROM Employees 
JOIN Store
ON Employees.EmployeeID = Store.EmployeeID
Where Gender = 'F'
GROUP BY StoreName;

SELECT COUNT(Gender) AS MaleEmployees, StoreName AS Store
FROM Employees
JOIN Store
ON Employees.EmployeeID = Store.EmployeeID
Where Gender = 'M'
GROUP BY StoreName;

这显然在两个选择查询中给出了所需的答案,尽管我需要它在一个查询中。我只需要帮助将两者变成一个单一的查询格式。

我尝试过使用两个子查询,但到目前为止没有任何效果。我知道如何得到答案,只是不是需要的格式。如果有人能帮我解决这个问题,将不胜感激。

【问题讨论】:

    标签: sql


    【解决方案1】:

    你可以这样做

    SELECT SUM(CASE WHEN Gender='F' THEN 1 ELSE 0 END) As FemaleEmployees,
           SUM(CASE WHEN Gender='M' THEN 1 ELSE 0 END) As MaleEmployees,
           storeName
    FROM Employees 
    JOIN Store
    ON Employees.EmployeeID = Store.EmployeeID
    GROUP BY storeName
    

    【讨论】:

      【解决方案2】:

      使用COUNT的另一种方式

      SELECT COUNT(CASE WHEN Gender='F' THEN 1 END) As FemaleEmployees,
             COUNT(CASE WHEN Gender='M' THEN 1 END) As MaleEmployees,
             StoreName AS Store
      FROM Employees 
      JOIN Store
      ON Employees.EmployeeID = Store.EmployeeID
      Where Gender in ( 'F','M' )
      GROUP BY StoreName;
      

      过滤Where子句中的Gender,使查询效率低..

      【讨论】:

        【解决方案3】:

        您需要使用“case”语句来区分不同的情况,如下所示: SELECT SUM (SELECT CASE WHEN GENDER = 'M' THEN 1 ELSE 0 END) as MaleCount, SUM (SELECT CASE WHEN GENDER = 'F' THEN 1 ELSE 0 END) AS FemaleCount, Storename AS Store FROM Employees JOIN Store ON Employees.EmployeeID = Store.EmployeeID

        GROUP BY StoreName;
        

        【讨论】:

          【解决方案4】:

          上面的大多数答案总是只得到性别 1 或 0 的计数...没有得到实际计数.. 所以获得实际计数,您可以这样做..

          SELECT (CASE WHEN GENDER = 'M' THEN COUNT(GENDER) ELSE 0 END) as MaleCount, (当性别 = 'F' THEN COUNT(GENDER) ELSE 0 END)作为女性计数时, 店铺名称 AS Store 来自员工 加盟店 ONEmployees.EmployeeID = Store.EmployeeID 按商店名称分组;

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-01-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-20
            • 2021-01-27
            • 2021-09-24
            相关资源
            最近更新 更多