如何在SQL内部有条件?

Chr*_*dan 0 sql sql-server where conditional-statements

我已经尝试过这段代码:

    SELECT Count(Gender) As MaleCount, Count(Gender) As FemaleCount
    FROM [Session4].[dbo].[Survey]
    Where Gender = 'M' or Gender = 'F' 
Run Code Online (Sandbox Code Playgroud)

在一个查询中使用两个不同的条件进行计数时,我无法获得准确的数据.

图片如下:

这是结果.

在此输入图像描述

这是原始数据

SELECT  TOP (1000) [Departure]
    ,[Arrival]
    ,[Age]
    ,[Gender]
    ,[CabinType]
    ,[Q1]
    ,[Q2]
    ,[Q3]
    ,[Q4]
FROM [Session4].[DBO].[Survey]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Ind*_*ent 6

计数说明:

  • COUNT(*) 统计所有行
  • COUNT(column) 计算非空值
  • COUNT(distinct column) 计算不同的非空值
  • COUNT(1) 与COUNT(*)相同

用例/何时+总和:

SELECT
    sum(case when Gender = 'M' then 1 else 0 end ) As MaleCount,
    sum(case when Gender = 'F' then 1 else 0 end ) As FemaleCount
FROM [Session4].[dbo].[Survey]
Run Code Online (Sandbox Code Playgroud)

会产生这样的事情:

MaleCount | FemaleCount
1000      | 1255
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用简单的goup

SELECT
    Gender,
    Count(*)
FROM [Session4].[dbo].[Survey]
GROUP BY
    Gender
Run Code Online (Sandbox Code Playgroud)

将产生:

Gender | Count
M      | 1000
F      | 1255
Run Code Online (Sandbox Code Playgroud)