此错误源于 COUNT(DISTINCT) 实现中的一个怪癖,有望很快得到改进。目前,如果您在子选择中使用多个 COUNT(DISTINCT) 和 GROUP BY,则需要在外部 SELECT 中使用全部或不使用 COUNT(DISTINCT) 输出。
如果这很麻烦,将 COUNT(DISTINCT) 替换为 GROUP BY 和 SUM() 可能会更容易。例如,如果删除任何外部字段,类似于您自己的查询将失败:
SELECT Cnt_a, Cnt_b
FROM (SELECT COUNT(DISTINCT IF(a > 0, c, NULL)) AS Cnt_a,
COUNT(DISTINCT IF(b > 0, c, NULL)) AS Cnt_b
FROM (SELECT 0 AS a, 1 AS b, 2 AS c, 3 as d)
GROUP BY d);
但按不同字段分组的等效查询将无论如何执行:
SELECT SUM(NonZero_a) AS Cnt_a, SUM(NonZero_b) AS Cnt_b
FROM (SELECT SUM(a) > 0 AS NonZero_a,
SUM(b) > 0 AS NonZero_b
FROM (SELECT 0 AS a, 1 AS b, 2 AS c, 3 as d)
GROUP BY c, d);