作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
CREATE PROCEDURE `get_timeline`
(
IN in_unit VARCHAR(255)
)
READS SQL DATA
BEGIN
SELECT
CASE in_unit
WHEN 'MICROSECOND' THEN DATE_FORMAT(`ts`, CONCAT("%Y-%m-%d %H:",LPAD(SECOND(`ts`) DIV 6,2,0),":%s"))
WHEN 'SECOND' THEN DATE_FORMAT(`ts`, CONCAT("%Y-%m-%d %H:",LPAD(SECOND(`ts`) DIV 6,2,0),":%s"))
WHEN 'MINUTE' THEN DATE_FORMAT(`ts`, CONCAT("%Y-%m-%d %H:",LPAD(SECOND(`ts`) DIV 6,2,0),":%s"))
WHEN 'HOUR' THEN DATE_FORMAT(`ts`, CONCAT("%Y-%m-%d %H:",LPAD(SECOND(`ts`) DIV 6,2,0),":%s"))
WHEN 'DAY' THEN DATE_FORMAT(`ts`, CONCAT("%Y-%m-%d %H:",LPAD(SECOND(`ts`) DIV 6,2,0),":%s"))
WHEN 'WEEK' THEN DATE_FORMAT(`ts`, CONCAT("%Y-%m-%d %H:",LPAD(MINUTE(`ts`) DIV 6,2,0),":00"))
WHEN 'MONTH' THEN DATE_FORMAT(`ts`, CONCAT("%Y-%m-%d ",LPAD(HOUR(`ts`) DIV 6,2,0),":00:00"))
WHEN 'YEAR' THEN DATE_FORMAT(`ts`, "%Y-%m-%d %0:00:00")
END AS `time`,
COUNT(*) AS `count`
FROM
`session`
GROUP BY
CASE in_unit
WHEN
'MICROSECOND'
THEN
(
YEAR(`ts`),
MONTH(`ts`),
WEEK(`ts`),
DAY(`ts`),
HOUR(`ts`),
MINUTE(`ts`),
SECOND(`ts`),
MICROSECOND(`ts`) DIV 100
)
WHEN
'SECOND'
THEN
(
YEAR(`ts`),
MONTH(`ts`),
WEEK(`ts`),
DAY(`ts`),
HOUR(`ts`),
MINUTE(`ts`),
SECOND(`ts`),
MICROSECOND(`ts`) DIV 100
)
WHEN
'MINUTE'
THEN
(
YEAR(`ts`),
MONTH(`ts`),
WEEK(`ts`),
DAY(`ts`),
HOUR(`ts`),
MINUTE(`ts`),
SECOND(`ts`),
MICROSECOND(`ts`) DIV 100
)
WHEN
'HOUR'
THEN
(
YEAR(`ts`),
MONTH(`ts`),
WEEK(`ts`),
DAY(`ts`),
HOUR(`ts`),
MINUTE(`ts`),
SECOND(`ts`) DIV 6
)
WHEN
'DAY'
THEN
(
YEAR(`ts`),
MONTH(`ts`),
WEEK(`ts`),
DAY(`ts`),
HOUR(`ts`),
MINUTE(`ts`) DIV 6
)
WHEN
'WEEK'
THEN
(
YEAR(`ts`),
MONTH(`ts`),
WEEK(`ts`),
DAY(`ts`),
HOUR(`ts`)
)
WHEN
'MONTH'
THEN
(
YEAR(`ts`),
MONTH(`ts`),
WEEK(`ts`),
DAY(`ts`)
)
WHEN
'YEAR'
THEN
(
YEAR(`ts`),
MONTH(`ts`),
WEEK(`ts`)
)
END
;
END
//
我尝试在 group by 子句中使用 case 语句,根据传递到存储过程的单位按 8、7、6、5、4 或 3 列进行分组,但收到“错误”代码:1241。操作数应包含 1 列”。我可以做什么来实现这个结果,而不必通过串联使用准备好的查询? (我使用的是MySQL)
最佳答案
你想做这样的事情:
GROUP BY YEAR(ts),
(case when in_unit in ('Month', . . .) then MONTH(`ts`) end),
(case when in_unit in ('Week', . . .) then WEEK(`ts`) end),
. . .
单位名称与group by
变量选择之间的关系对我来说是完全清楚的。但基本上,您只需为每个可能的变量添加一个条件即可。
关于mysql - 存储过程的 Group By 子句如何具有不同的列数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19848079/
我是一名优秀的程序员,十分优秀!