【问题标题】:Cannot nest aggregate operations不能嵌套聚合操作
【发布时间】:2015-08-26 08:06:49
【问题描述】:

我正在尝试运行以下查询:

Select T, COUNT(T) as CountOf, (COUNT(T)*100)/(SUM(COUNT(T))) AS percen FROM
(
select prod as T, x,y,z from table1
UNION ALL select prod as T, x,y,z from table2
UNION ALL select prod as T, x,y,z from table3
)
AS m
GROUP BY T ORDER BY COUNT(T) DESC;

上面的查询给出了错误。我能够在没有第三个参数的情况下成功运行查询,即(COUNT(T)*100)/(SUM(COUNT(T))) AS percent(计算第二个参数的百分比分布,即CountOf

但是当我包含百分比参数时,它会出错。对此的任何帮助将不胜感激。

【问题讨论】:

  • MySQL、SQLServer 和 teradata 都是不同的产品——您使用的是哪一种?这与您的问题直接相关 - 在 SQLServer 中比在 MySQL 中执行您想要的(我认为)有一种更简单的方法。

标签: mysql teradata


【解决方案1】:

我不喜欢使用 distinct 但如果你使用 sql server 你可以试试

Select DISTINCT T, COUNT(*) OVER (PARTITION BY T) as CountOf,  ((COUNT(*) OVER (PARTITION BY T) * 100) / COUNT(*) OVER ()) AS percen FROM
(
select prod as T, x,y,z from table1
UNION ALL select prod as T, x,y,z from table2
UNION ALL select prod as T, x,y,z from table3
)
AS m

CTE 选项

WITH cteUnion AS (
    SELECT prod AS T, x,y,z FROM table1
    UNION ALL 
    SELECT prod AS T, x,y,z FROM table2
    UNION ALL 
    SELECT prod AS T, x,y,z FROM table3
),
cteUnionWithTotalCount AS (
    SELECT *, COUNT(*) OVER () AS TotalCount FROM cteUnion
)
SELECT  T, COUNT(*) AS CountOf, ((COUNT(*) * 100)/ TotalCount) AS percen
FROM    cteUnionWithTotalCount
GROUP BY T, TotalCount
ORDER BY COUNT(*)

【讨论】:

  • 你好,第二个参数变成每行的1,第三个参数,即每行的百分比变成0。仍然无法弄清楚。
  • 你还在用你的group by吗?
  • 是的,我正在使用 group by 子句
  • 取出group by子句
  • 嗨,谢谢。我想到了。唯一的问题是许多值都是 0,因为它试图将 106 行分配为百分比值。所以值非常高的值得到一个百分比数字,其余的都得到 0。
【解决方案2】:

您需要将SUM 更改为SUM OVER,但MySQL 不支持:

SELECT T, COUNT(T) AS CountOf, 
   (COUNT(T)*100)/(SUM(COUNT(T)) OVER ()) AS percen
FROM
 (
   SELECT prod AS T, x,y,z FROM table1
   UNION ALL 
   SELECT prod AS T, x,y,z FROM table2
   UNION ALL 
   SELECT prod AS T, x,y,z FROM table3
  ) AS m
GROUP BY T 
ORDER BY COUNT(T) DESC;

【讨论】:

    猜你喜欢
    • 2019-03-13
    • 2020-05-15
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多