【问题标题】:Combining results before grouping in SQL在 SQL 中分组之前组合结果
【发布时间】:2015-02-21 13:40:25
【问题描述】:

我想根据客户的头衔(先生、夫人等)计算出客户的男女比例

为此,我需要将 Miss/Mrs/Ms 的结果合并到一个“女性”字段中。

下面的查询获取每个标题的总数,但我想我需要一个子查询来返回组合的女性形象。

任何帮助将不胜感激。

Query:
SELECT c.Title, COUNT(*) as Count
FROM
   Customers c
GROUP BY Title
ORDER By [Count] DESC

Answer:
Mr  1903
Miss    864
Mrs 488
Ms  108

【问题讨论】:

  • 女性 = select COUNT(*) from Customers where Title <> 'Mr'

标签: sql sql-server tsql select group-by


【解决方案1】:

你可以这样做

SELECT 
  [Gender] = CASE [Title] WHEN 'Mr' THEN 'M' ELSE 'F' END, 
  COUNT(*) as Count
FROM
   Customers c
GROUP BY 
  CASE [Title] WHEN 'Mr' THEN 'M' ELSE 'F' END
ORDER By 
  [Count] DESC

http://sqlfiddle.com/#!3/05c74/4的演示

【讨论】:

  • 嗨,盖比。这是第一个令人满意的答案。谢谢
【解决方案2】:

您可以使用 CASE 为 Titles 投影新组:

SELECT SUM(CASE WHEN Title IN ('Mr') THEN 1 ELSE 0 END) AS Male,
       SUM(CASE WHEN Title IN ('Miss', 'Ms', 'Mrs') THEN 1 ELSE 0 END) AS Female
FROM
   Customers c;

【讨论】:

    【解决方案3】:

    试试这个:

    SELECT (CASE WHEN c.Title = 'Mr' THEN 'Male' 
                 WHEN c.Title IN ('Mrs', 'Miss', 'Ms') THEN 'Female' 
                 ELSE 'NA' 
            END) AS title, 
            COUNT(1) AS PeopleCount
    FROM Customers c
    GROUP BY (CASE WHEN c.Title = 'Mr' THEN 'Male' 
                  WHEN c.Title IN ('Mrs', 'Miss', 'Ms') THEN 'Female' 
                  ELSE 'NA' 
             END)
    ORDER By PeopleCount DESC;
    

    【讨论】:

    • 嗨,Saharsh,该查询创建了三个单独的“女性”记录
    • 我想达到:男:332 女:284。你的查询给了我男 332 女 178 女 90 女 16
    • 嗨,Saharsh,已经解决了。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2019-02-03
    相关资源
    最近更新 更多