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是每个人的平均佣金,包括那些有空值的。

谢谢。

您可以使用 COALESCENULL 值转换为 0,然后取平均值得到您的 AVEALL 值:

SELECT AVG(COMM) AVG_COMM, AVG(COALESCE(COMM, 0)) AVEALL
FROM STAFF

Demo on dbfiddle

如果我理解正确的话,您将需要以下内容:


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的记录设置为零以计算平均值