SQL - 第二个 SELECT 对象的 WHERE
SQL - WHERE for 2nd SELECT object
我试图在我的 SQL table 中找到平均 2 件商品,从 table 获得佣金的人的平均佣金,以及平均佣金, 包括那些没有得到佣金的人 (null)。
我的代码:
SELECT AVG(COMM) AVG_COMM, AVG(COMM) AVEALL
FROM STAFF
WHERE COMM IS NOT NULL;
这是我得到的:
AVG_COMM AVEALL
---------- ----------
97.5 97.5
这就是我想要的:
AVG_COMM AVEALL
---------- ----------
97.5 27.851
这就是我想要的,AVEALL是每个人的平均佣金,包括那些有空值的。
谢谢。
您可以使用 COALESCE
将 NULL
值转换为 0,然后取平均值得到您的 AVEALL
值:
SELECT AVG(COMM) AVG_COMM, AVG(COALESCE(COMM, 0)) AVEALL
FROM STAFF
如果我理解正确的话,您将需要以下内容:
select avg (case when COMM is not null then COMM end) as AVG_COMM, avg(IF(COMM is null, 0, COMM)) as AVEALL from staff;
第一个return只统计不为空的记录并计算平均值,第二个return统计所有记录并将NULL的记录设置为零以计算平均值
我试图在我的 SQL table 中找到平均 2 件商品,从 table 获得佣金的人的平均佣金,以及平均佣金, 包括那些没有得到佣金的人 (null)。
我的代码:
SELECT AVG(COMM) AVG_COMM, AVG(COMM) AVEALL
FROM STAFF
WHERE COMM IS NOT NULL;
这是我得到的:
AVG_COMM AVEALL
---------- ----------
97.5 97.5
这就是我想要的:
AVG_COMM AVEALL
---------- ----------
97.5 27.851
这就是我想要的,AVEALL是每个人的平均佣金,包括那些有空值的。
谢谢。
您可以使用 COALESCE
将 NULL
值转换为 0,然后取平均值得到您的 AVEALL
值:
SELECT AVG(COMM) AVG_COMM, AVG(COALESCE(COMM, 0)) AVEALL
FROM STAFF
如果我理解正确的话,您将需要以下内容:
select avg (case when COMM is not null then COMM end) as AVG_COMM, avg(IF(COMM is null, 0, COMM)) as AVEALL from staff;
第一个return只统计不为空的记录并计算平均值,第二个return统计所有记录并将NULL的记录设置为零以计算平均值