首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql按名称分组查询,按id排序,按id限制

mysql按名称分组查询,按id排序,按id限制
EN

Stack Overflow用户
提问于 2017-08-01 20:09:43
回答 6查看 239关注 0票数 4

我有一张这样的桌子

代码语言:javascript
复制
id   name   amount
 1   fish    120
 1   meat    230
 2   meat    110
 2   fish    78
 1   salad   50
 3   meat    103
 3   salad    22
 2   salad    34

我想要写一个查询,它将对名称进行分组并对其金额求和,但它应该限制在前两个id,因此按名称对项目进行分组并对每个匹配的名称求和……这应该将其限制为前两个id。这只是id 1和2。留下账号3。注意。ID是来自另一个表的外键。

这就是我尝试过的。但它不起作用

代码语言:javascript
复制
select name, sum(amount) from table1 group by amount, id order by id limit 2

在进行计算后,该函数仅输出2个结果

代码语言:javascript
复制
name   amount
fish   198
meat   443

我正期待着这样的事情。

代码语言:javascript
复制
name   amount
fish   198
meat   340
salad  84

将id仅为1和2的项的数量相加,并按名称分组

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-08-01 20:16:10

您不希望限制总输出,但希望在它生成sum之前对其进行限制,因此可以使用子查询。

代码语言:javascript
复制
select t1.name, sum(t1.amount)
from table1 t1 join
     (select tt1.id
      from table1 tt1
      group by id
      order by id
      limit 2
     ) t2
     on t1.id = t2.id
group by t1.name;

工作示例link

结果:

代码语言:javascript
复制
name    sum(t1.amount)

fish    198

meat    340

salad   84
票数 0
EN

Stack Overflow用户

发布于 2017-08-01 20:13:16

代码语言:javascript
复制
SELECT name, sum(amount) 
  FROM table1 
 WHERE id <= 2
 GROUP BY name
 ORDER BY name
票数 0
EN

Stack Overflow用户

发布于 2017-08-01 20:13:31

前两个ids是什么?如果我假设你指的是“全局”,那么:

代码语言:javascript
复制
select t1.name, sum(t1.amount)
from table1 t1 join
     (select tt1.id
      from table1 tt1
      group by id
      order by id
      limit 2
     ) tt1
     on t1.id = tt1.id
group by t1.name;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45437431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档