gpt4 book ai didi

mysql - 存储过程的 Group By 子句如何具有不同的列数?

转载 作者:行者123 更新时间:2023-11-29 13:28:10 24 4
gpt4 key购买 nike

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com