mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-02-04 14:31:34 +01:00
Fixed session aggregate calculations in Query page
Players with no sessions within view did not affect the data
This commit is contained in:
parent
db0a8359b9
commit
4a95ad5f5d
@ -840,7 +840,6 @@ public class SessionQueries {
|
||||
|
||||
public static Query<Map<String, Long>> summaryOfPlayers(Set<UUID> playerUUIDs, long after, long before) {
|
||||
String selectAggregates = SELECT +
|
||||
SessionsTable.USER_UUID + ',' +
|
||||
"SUM(" + SessionsTable.SESSION_END + '-' + SessionsTable.SESSION_START + ") as playtime," +
|
||||
"SUM(" + SessionsTable.SESSION_END + '-' + SessionsTable.SESSION_START + '-' + SessionsTable.AFK_TIME + ") as active_playtime," +
|
||||
"COUNT(1) as session_count" +
|
||||
@ -848,22 +847,9 @@ public class SessionQueries {
|
||||
WHERE + SessionsTable.SESSION_START + ">?" +
|
||||
AND + SessionsTable.SESSION_END + "<?" +
|
||||
AND + SessionsTable.USER_UUID + " IN ('" +
|
||||
new TextStringBuilder().appendWithSeparators(playerUUIDs, "','").build() + "')" +
|
||||
GROUP_BY + SessionsTable.USER_UUID;
|
||||
new TextStringBuilder().appendWithSeparators(playerUUIDs, "','").build() + "')";
|
||||
|
||||
String sql = SELECT +
|
||||
"SUM(playtime) as total_playtime," +
|
||||
"AVG(playtime) as average_playtime," +
|
||||
"SUM(active_playtime) as total_active_playtime," +
|
||||
"AVG(active_playtime) as average_active_playtime," +
|
||||
"SUM(playtime-active_playtime) as total_afk_playtime," +
|
||||
"AVG(playtime-active_playtime) as average_afk_playtime," +
|
||||
"AVG(playtime) as average_playtime," +
|
||||
"SUM(session_count) as total_sessions," +
|
||||
"AVG(session_count) as average_sessions" +
|
||||
FROM + "(" + selectAggregates + ") s";
|
||||
|
||||
return new QueryStatement<Map<String, Long>>(sql) {
|
||||
return new QueryStatement<Map<String, Long>>(selectAggregates) {
|
||||
@Override
|
||||
public void prepare(PreparedStatement statement) throws SQLException {
|
||||
statement.setLong(1, after);
|
||||
@ -874,16 +860,18 @@ public class SessionQueries {
|
||||
public Map<String, Long> processResults(ResultSet set) throws SQLException {
|
||||
if (set.next()) {
|
||||
long sessionCount = set.getLong("total_sessions");
|
||||
long playtime = set.getLong("total_playtime");
|
||||
long playtime = set.getLong("playtime");
|
||||
long activePlaytime = set.getLong("active_playtime");
|
||||
int playerCount = playerUUIDs.size();
|
||||
return Maps.builder(String.class, Long.class)
|
||||
.put("total_playtime", playtime)
|
||||
.put("average_playtime", set.getLong("average_playtime"))
|
||||
.put("total_afk_playtime", set.getLong("total_afk_playtime"))
|
||||
.put("average_afk_playtime", set.getLong("average_afk_playtime"))
|
||||
.put("total_active_playtime", set.getLong("total_active_playtime"))
|
||||
.put("average_active_playtime", set.getLong("average_active_playtime"))
|
||||
.put("average_playtime", playerCount != 0 ? playtime / playerCount : -1L)
|
||||
.put("total_afk_playtime", playtime - activePlaytime)
|
||||
.put("average_afk_playtime", playerCount != 0 ? playtime - activePlaytime / playerCount : -1L)
|
||||
.put("total_active_playtime", activePlaytime)
|
||||
.put("average_active_playtime", playerCount != 0 ? activePlaytime / playerCount : -1L)
|
||||
.put("total_sessions", sessionCount)
|
||||
.put("average_sessions", set.getLong("average_sessions"))
|
||||
.put("average_sessions", playerCount != 0 ? sessionCount / playerCount : -1L)
|
||||
.put("average_session_length", sessionCount != 0 ? playtime / sessionCount : -1L)
|
||||
.build();
|
||||
} else {
|
||||
|
Loading…
Reference in New Issue
Block a user