mysql - SUM 列的最小值和最大值
问题描述
我有一张像这样的桌子:
Phrase | qty
phrase_1 | 4
phrase_1 | 1
phrase_1 | 8
phrase_2 | 2
phrase_3 | 3
phrase_3 | 2
我最初返回的是:
phrase_1 | 13
phrase_3 | 5
phrase_2 | 2
使用:
SELECT phrase, sum(qty) as total
FROM mytable
GROUP By phrase
ORDER BY total DESC
我需要并且无法弄清楚的是如何返回结果的最小值和最大值。
所以我会得到:
phrase, qty, min, max
phrase_1 | 13 | 2 | 13
phrase_3 | 5 | 2 | 13
phrase_2 | 2 | 2 | 13
因为我想对结果集进行规范化并根据 1 到 0 之间的值返回一个新顺序。
类似的东西(这不起作用):
SELECT phrase, sum(qty) as total, (total - min(total)/max(total) - min(total)) AS rank
FROM mytable
GROUP By phrase
ORDER BY rank DESC
上述声明最终是我想要做的,但不确定是否可能。
解决方案
你想要窗口功能:
SELECT phrase, sum(qty) as total,
MIN(SUM(qty)) OVER () as min_total,
MAX(SUM(qty)) OVER () as max_total
FROM mytable
GROUP By phrase
ORDER BY total DESC
推荐阅读
- ios - 不小心删除了segue。建议?
- java - 如何实现用于写入文本文件的代码(Java)
- firebase - React Native Firebase 只获取一次数据
- javascript - 将文本框中的数字除以 4 组数字,每个数字得到其总和,并组合每组中每个总和的所有最后一位
- swift - Swift 和 AudioFormatGetProperty(_:_:_:_:_:)
- javascript - “震动效果”只持续一个周期
- javascript - 选择表单更改时更改链接参数
- android - AlertDialog dialog.dismiss(), dialog.close() 不工作
- html - 使 flexbox 容器可垂直滚动
- c# - LINQ 方法语法包括 4 层深度