gpt4 book ai didi

mysql - 在 MySQL 中对动态创建的列求和

转载 作者:行者123 更新时间:2023-11-29 00:11:53 25 4
gpt4 key购买 nike

更新:不确定我正在尝试实现的目标是否可行,但感谢所有帮助 - 请求删除此内容是否合适?我不希望贡献者失去我为他们的帮助而给予的赞成票。

更新:明确地说,当我说列是“动态”创建时,我的意思是没有开发人员输入,所以它们是未知的。它们仍然是标准数据库表中正确定义的列——我只是不知道它们的名称。 :-D

我有一个包含动态创建的列的表(很少,但我正在努力使其尽可能健壮)。我需要输出这些列的总和,按最高优先排序,但显然还需要第一行中的列名(否则数据无用)。我已经使用 PHP 中的 information_schema.columns 方法检索了列,并认为我会遍历执行 SUM 的列,但如果我这样做,它们不会按数字排序。

这可以内置到 SP 中(我假设由于复杂性,它必须在 SP 中完成)。我相信我可能需要在某处涉及“PIVOT”,但这是我知识的限制!

总结一下(看看我在那里做了什么 :-D )

我有一个包含如下列的表定义:

volunteerID INT
yearAdded DATETIME
willySize111to120 INT
willySize121to130 INT
willySize131to140 INT
willySize141to150 INT

我想在可以指定年份的查询中返回这样的数据集:

sizeBracket             count
willySize111to120 98
willySize121to130 76
willySize131to140 54
willySize141to150 23

每次我认为我找到了解决方法时,我都会碰壁。

感谢您的帮助或指点!

鲍勃

最佳答案

假设您的原始表格在每个志愿者的正确括号中有一个 1,在所有其他括号中有一个 0:

  SELECT bracket.sizeBracket, COUNT(*) count
FROM (
SELECT CASE
WHEN willySize111to120 THEN 'willySize111to120'
WHEN willySize121to130 THEN 'willySize121to130'
WHEN willySize131to140 THEN 'willySize131to140'
WHEN willySize141to150 THEN 'willySize141to150'
END CASE sizeBracket
FROM ... -- < Table Name
WHERE ... -- < Date Selection Logic
) bracket
GROUP BY sizeBracket
ORDER BY count DESC

更新

基于包含列的原始数据表willySize

volunteerID INT
yearAdded DATETIME
willySize INT

您可以运行以下查询

  SELECT 
CONCAT(
'willySize',
ROUND(willySize-6,-1)+1,
'to',
ROUND(willySize+4,-1)
) sizeBracket,
COUNT(*) count
FROM willySize
GROUP BY sizeBracket
ORDER BY count DESC

关于mysql - 在 MySQL 中对动态创建的列求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24674231/

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