sqlite - 如何将整体计数和分组结合起来?

时间:2014-11-28 09:54:13

标签: sql sqlite count group-by

我有下表的照片,他们的时间和月份:

TIME|MONTH|PHOTO
----|-----|-----
 x1 | mx1 | p1
 x2 | mx2 | p2
 ...

我希望将所有月份排在后代,但总照片数量一直持续到那个月 - 而不仅仅是该月份的数量。

例如,以下查询不够好,因为它返回每个特定月份组的计数,而不是该组之前的总计数:

select MONTH, count(TIME) from PHOTOS group by MONTH sort by MONTH desc

想法?

3 个答案:

答案 0 :(得分:2)

与其他RDBMS相比,SQLite的功能较少,但我认为这是你应该这样做的:

SELECT photosA.month,
       (SELECT COUNT(time) AS PhotoCounter
        FROM   photos AS photosB 
        WHERE  photosB.month <= photosA.month) AS total_photos
FROM   photos AS photosA
GROUP BY photosA.month

侨!

答案 1 :(得分:1)

select a.month, count(b.month) as CountSmaller
from  [PHOTOS] a
inner join [PHOTOS] b on b.[MONTH] <= a.[MONTH]
group by a.time, a.month, a.photo
order by 2 desc

在sqlfiddle中测试

答案 2 :(得分:0)

小提琴http://sqlfiddle.com/#!7/812ac/2/0
要解决您的问题,首先需要某种月份订单。您可以通过此查询执行此操作:

select 1 id, 'mx1' m
union
select 2, 'mx2'
union
select 3, 'mx3'
union
select 4, 'mx4'

您可以通过嵌套查询在每个查询中执行此操作,也可以创建单独的表。 并且操纵嵌套查询,聚合函数和连接可以通过以下方式实现目标:

select m2,
(
    select count(*) from photos p
    inner join 
    (
      select 1 id, 'mx1' month
      union
      select 2, 'mx2'
      union
      select 3, 'mx3'
      union
      select 4, 'mx4'
    ) m
    on p.month = m.month and m.id <= M.id2
)

from
(
    select 1 id2, 'mx1' m2
    union
    select 2, 'mx2'
    union
    select 3, 'mx3'
    union
    select 4, 'mx4'
) M


如果您有任何问题,我可以在评论中回答。