sql - 如何将 1 语句用于许多不同的事情?
问题描述
我想对统计数据执行以下操作,通常情况下,它会一次提交多个语句。有没有办法将这些变成 1 语句?
该表将按分钟提供 API 调用的统计信息。
-------------------------
Statistic
-------------------------
appName varchar(256) PK
timeMinuteMS bigint PK
totalElapsedMs bigint
totalCount bigInt
minElapsedMs bigInt
maxElapsedMs bigInt
我要运行的语句是
UPDATE Statistic SET minElapsedMS = ? WHERE(appName = ? AND timeMinuteMs = ? AND minElapsedMs > ?);
UPDATE Statistic SET maxElapsedMS = ? WHERE(appName = ? AND timeMinuteMs = ? AND maxElapsedMs < ?);
UPDATE Statistic SET totalElapsedMs = (totalElapsedMs + ?), totalCount = (totalCount + 1) WHERE(appName = ? AND timeMinuteMs = ?);
有没有办法将所有 3 合并为 1?
稍后我将运行性能测试,只需要首先使用 1 语句。
解决方案
您可以在一个中执行此操作update
,但要复杂得多:
UPDATE Statistic
SET minElapsedMS = (CASE WHEN timeMinuteMs = ? AND minElapsedMs > ? THEN ? ELSE minElapsedMS END),
maxElapsedMS = (CASE WHEN timeMinuteMs = ? AND maxElapsedMs < ? THEN ? ELSE maxElapsedMS END),
totalElapsedMs = totalElapsedMs + (CASE WHEN timeMinuteMs = ? THEN 1 ELSE 0 END),
totalCount = totalCount + (CASE WHEN timeMinuteMs = ? THEN 1 ELSE 0 END)
WHERE appName = ? AND
( (timeMinuteMs = ? AND minElapsedMs > ?) OR
(timeMinuteMs = ? AND maxElapsedMs < ?) OR
timeMinuteMs = ?
);
请注意,这有更多参数,因此您需要小心传递值。
推荐阅读
- r - 双 Y 轴图中每个条的月份和年份:geom_bar、geom_line
- python - OSError:无法识别图像文件(某些图像存在问题)
- python - qbittorrent 应用程序的 Web UI 上的 Selenium 自动化“无法定位元素”错误
- discord - 我怎样才能制作一个不和谐的机器人,当他们加入服务器时,他们会 DM 新用户?
- php - PHP | 谷歌验证码文件
- angular - 如何在 docker 容器上运行单个 spa 应用程序
- html - 悬停过渡时移动的文本
- react-native - 无法在 react-native-bottom-sheet 中使底片的角变圆
- python - Python:在我的 Visual Studio Code 上找不到选择解释器命令
- react-native - 当连接返回 react-native-offline 时优先 actionQueue