mysql - SQL:求和返回结果的最大值

标签 mysql sql select sum max

以下 SQL 语句产生下面列出的结果。问题是,我如何修改此语句以仅提供单个值的总和,即 6,940

SELECT 
post_metrics.post_id,
post_metric_types.name, 
MAX(post_metrics.value)
FROM post_metrics 
INNER JOIN post_metric_types ON post_metric_types.id = post_metrics.post_metric_type_id 
LEFT JOIN posts ON posts.id = post_metrics.post_id
WHERE post_metrics.post_metric_type_id = 2
AND posts.channel_id = 2268
GROUP BY post_metrics.post_id 
ORDER BY post_metrics.post_metric_type_id, post_metrics.post_id, post_metrics.value DESC

POSTID:值;

1: 25; 2: 588; 3: 12; 4:0; 5: 74; 6:12; 7:4; 8:27; 9:13; 10:70; 11:0; 12:28; 13:0; 14:204; 15:181; 16:101; 17:17; 18:19; 19:0; 20:171; 21:37; 22: 72; 23:25; 24:82; 25:81; 26:164; 27:0; 28:37; 29:215; 30:6; 31:0; 32:203; 33:10; 34:7; 35:29; 36:71; 37:39; 38:8; 39:0; 40:28; 41:4; 42:35; 43:44; 44:9; 45:0; 46:18; 47:125; 48:6; 49:30; 50:0; 51:6; 52:11; 53:8; 54:74; 55:0; 56:10; 57:8; 58:11; 59:0; 60:12; 61: 15; 62:0; 63:108; 64:9; 65:72; 66:24; 67:0; 68:19; 69:86; 70:0; 71:16; 72: 25; 73:10; 74:23; 75:12; 76:23; 77:10; 78:0; 79:0; 80:101; 81:141; 82:14; 83:0; 84:5; 85:43; 86: 36; 87:0; 88:9; 89:22; 90: 14; 91: 10; 92:17; 93:6; 94:3; 95:0; 96:9; 97:9; 98:0; 99:67; 100:18; 101: 10; 102:3; 103:0; 104:7; 105:0; 106: 9; 107:13; 108:3; 109:10; 110: 27; 111: 14; 112: 60; 113: 22; 114:11; 115:10; 116:0; 117:15; 118:11; 119: 20; 120:0; 121: 42; 122: 26; 123:0; 124: 15; 125:30; 126:4; 127:66; 128:9; 129:35; 130:5; 131:0; 132: 17; 133:0; 134:616; 135:5; 136:6; 137:0; 138:4; 139:24; 140:5; 141:0; 142:5; 143: 710; 144:0; 145:30; 146:6; 147:25; 148:4; 149:7; 150:6; 151:0; 152: 28; 153:6; 154:9; 155:0; 156:10; 157:4; 158:2; 159:0; 160:0; 161: 51; 162: 10; 163:6; 164:35; 165:6; 166:2; 167:0; 168:0; 169: 13; 170:5; 171:4; 172:3; 173:9; 174:8; 175:3; 176:0; 177:19; 178:45; 179:0; 180: 27; 181:0; 182: 13; 183:8; 184:9; 185:5; 186:0; 187: 103; 188:4; 189: 12; 190:5; 191: 10; 192: 8; 193:5; 194:6; 195:6; 196:6; 197:6; 198: 87; 199: 4; 200: 55; 201: 30; 202: 9; 203: 32; 204: 9; 205:0; 206: 10; 207:0; 208: 29; 209: 11; 210: 10; 211: 4; 212:0; 213: 44; 214: 101;

= 6,904

谢谢

最佳答案

将现有查询用作子查询是一种方法:

SELECT SUM(maxpostmetric)
FROM (
    SELECT 
        post_metrics.post_id,
        post_metric_types.name, 
        MAX(post_metrics.value) maxpostmetric
    FROM post_metrics 
        INNER JOIN post_metric_types ON post_metric_types.id = post_metrics.post_metric_type_id 
        LEFT JOIN posts ON posts.id = post_metrics.post_id
    WHERE post_metrics.post_metric_type_id = 2
        AND posts.channel_id = 2268
    GROUP BY post_metrics.post_id 
) t

祝你好运。

顺便说一句——您在 posts 表上使用了 LEFT JOIN,但随后在您的 WHERE 标准中包含了该表中的一列。您可以将其转换为 INNER JOIN

关于mysql - SQL:求和返回结果的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14657881/

相关文章:

mysql - 使用 Postgres 在 Laravel 5.3 中更新区分大小写的数据库字段

mysql - 为什么 MySQL 客户端不使用我指定的端口?

mysql - 使用 phpmyadmin 的 mySQL INNER JOIN 语法

jquery - 使用 jQuery 和 JSON 自动填充选择标签

PHP 脚本中止,导致 MySQL 事务失败,整个应用程序锁定一会儿

java - JPA Map 映射以连接具有 3 列的表

mysql - 通过创建函数使用 mysql 工作台自动生成员工 ID

c# - 运算符 '==' 不能应用于类型 'int' 和 'System.Linq.iQueryable<int>' 的操作数

sql - 如何在 SQL 函数 CHARINDEX 中使用 RegEx 查找第 n 次出现

mysql - 选择区域无人的时间 - mysql