首页 > 解决方案 > 如何将 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 语句。

标签: sql

解决方案


可以在一个中执行此操作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 = ?
          );

请注意,这有更多参数,因此您需要小心传递值。


推荐阅读