diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/WholeStageCodegen.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/WholeStageCodegen.scala
index ef81ba60f049f9f830f8b0fc292b155f843cb2a7..02b0f423ed438917122cd7569b022570421abc97 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/execution/WholeStageCodegen.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/WholeStageCodegen.scala
@@ -26,6 +26,7 @@ import org.apache.spark.sql.catalyst.expressions._
 import org.apache.spark.sql.catalyst.expressions.codegen._
 import org.apache.spark.sql.catalyst.plans.physical.Partitioning
 import org.apache.spark.sql.catalyst.rules.Rule
+import org.apache.spark.sql.execution.aggregate.TungstenAggregate
 import org.apache.spark.util.Utils
 
 /**
@@ -33,6 +34,12 @@ import org.apache.spark.util.Utils
   */
 trait CodegenSupport extends SparkPlan {
 
+  /** Prefix used in the current operator's variable names. */
+  private def variablePrefix: String = this match {
+    case _: TungstenAggregate => "agg"
+    case _ => nodeName.toLowerCase
+  }
+
   /**
     * Whether this SparkPlan support whole stage codegen or not.
     */
@@ -53,7 +60,7 @@ trait CodegenSupport extends SparkPlan {
     */
   def produce(ctx: CodegenContext, parent: CodegenSupport): String = {
     this.parent = parent
-    ctx.freshNamePrefix = nodeName
+    ctx.freshNamePrefix = variablePrefix
     doProduce(ctx)
   }
 
@@ -94,7 +101,7 @@ trait CodegenSupport extends SparkPlan {
       child: SparkPlan,
       input: Seq[ExprCode],
       row: String = null): String = {
-    ctx.freshNamePrefix = nodeName
+    ctx.freshNamePrefix = variablePrefix
     if (row != null) {
       ctx.currentVars = null
       ctx.INPUT_ROW = row