如何根据参数值对查询结果进行分组

时间:2010-11-13 08:36:37

标签: mysql

我们如何根据传递的参数对查询结果进行分组。

下面显示了一个小的存储过程。参数Param传递给过程。

如果参数值为“f”,则结果必须按starttime分组,否则使用formid。我怎样才能做到这一点。我尝试了下面的代码,但它不起作用。

DROP PROCEDURE IF EXISTS Test;
CREATE PROCEDURE Test (Param VARCHAR (2))


 BEGIN
  SELECT formid, starttime
    FROM tbevaluationscoreinfo
   CASE Param
     when 'F'
      then group by starttime;
     else
      group by formid;

   end
END;

1 个答案:

答案 0 :(得分:2)

一种方法是将分支提升到一个水平:

IF Param = 'F' THEN
  SELECT starttime, count(formid)
  FROM tbevaluationscoreinfo
  GROUP BY starttime;
ELSE
  SELECT formid, count(starttime)
  FROM tbevaluationscoreinfo
  GROUP BY formid;
END IF;

另一个不太推荐的解决方案是动态SQL。

第三种可能的解决方案是:

SELECT
  case Param when 'F' then starttime else formid end as group_column,
  count(formid),
  count(starttime)
FROM
  tbevaluationscoreinfo
GROUP BY
  group_column;