计算mysql表有限行的总和?

时间:2014-11-10 04:47:26

标签: mysql subquery

我正在研究drupal website,我希望显示有限数量的术语。但是我失败了,在运行查询时,我简化了要询问的查询。

我想计算mySQL表有限行的总和,但不幸的是,mySQL上升了Unknown column' node.node_id'在' where子句'错误。

查询PostgreSQL (SQLFiddle)上的工作。 我有以下架构

create table rating (
  node_id int,
  rank int
);

create table node (
  node_id int
);

insert into node
(node_id)
values
(1),
(2);

insert into rating
(node_id, rank)
values
(1, 2),
(1, 3),
(1, 5),
(1, 7),
(2, 5),
(2, 7),
(2, 11),
(2, 13)
;

我的疑问是

select node.node_id, (
  select sum(rank)
  from (
    select child_rating.rank
    from rating as child_rating
    where child_rating.node_id = node.node_id
    limit 3
  ) as _child

) as sum
from node

有关预期结果,请参阅SQLFiddle。 (或者参见下面的图片了解SQLFiddle的预期结果。

enter image description here

我想知道是否有人帮助我。感谢

1 个答案:

答案 0 :(得分:0)

在MySQL中,根据每个组限制记录总是很棘手。

以下sql查询为您提供了解决方案:

select node_id, sum(rank) from (
SELECT @row_number:=CASE WHEN @node_id=node_id 
THEN @row_number+1 ELSE 1 END AS row_num,@node_id:=node_id AS node_id, rank
FROM rating, (SELECT @row_number:=0,@node_id:='') AS t
  ORDER BY node_id
  )t1
where row_num <= 3
group by node_id
;

SQL小提琴链接:http://sqlfiddle.com/#!2/b142f/5

P.S:Pl看一下我几天前回答的以下链接。 auto increment by specific column's data