在SQL中分组之前组合结果

时间:2014-12-23 11:58:13

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

我想根据个人的头衔(先生,夫人等)来确定我的客户的男/女分裂

要做到这一点,我需要将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

3 个答案:

答案 0 :(得分:4)

你可以这样做

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

演示

答案 1 :(得分:1)

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

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;

答案 2 :(得分:0)

试试这个:

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;