使用查询进行计数?

时间:2010-07-02 17:14:59

标签: sql mysql stored-procedures count

我使用此查询

SELECT userId, submDate, COUNT(submId) AS nSubms
FROM submissions
GROUP BY userId, submDate
ORDER BY userId, submDate

获取每个用户每个日期提交的总数 但是我需要为每个用户提供渐进计数,以便我可以看到他们的提交如何随着时间累积。

这可以在查询中实现吗?

编辑:获得的表格如下:

  userId submDate nSubms
  1       2-Feb    1
  1       4-Feb    7
  2       1-Jan    4
  2       2-Jan    2
  2       18-Jan   1

我想制作这个:

  userId submDate nSubms  progressive
  1       2-Feb    1           1
  1       4-Feb    7           8
  2       1-Jan    4           4
  2       2-Jan    2           6
  2       18-Jan   1           7

编辑2:很抱歉没有提及,我不允许使用:

  • 存储过程调用
  • 更新/删除/插入/创建查询
  • 联盟
  • DISTINCT关键字

    因为我使用的工具不允许这些。

3 个答案:

答案 0 :(得分:2)

您可以使用自联接来获取同一个表的所有行,其中包含当前行之前的日期:

SELECT s0.userId, s0.submDate, COUNT(s0.submId) AS nSubms, COUNT (s1.submId) AS progressive
FROM submissions AS s0
JOIN submissions AS s1 ON s1.userId=s0.userId AND s1.submDate<=s0.submDate
GROUP BY s0.userId, s0.submDate
ORDER BY s0.userId, s0.submDate

这将迫使数据库一次又一次地对所有相同的行进行无意义的工作。最好在调用查询的任何脚本中添加nSubms,或者在SQL变量中添加{{1}},如果在您的环境中可用。

答案 1 :(得分:1)

最佳解决方案是在客户端进行此操作 这是工作的正确工具。数据库不适合这种任务

答案 2 :(得分:1)

Select S.userId, S.submDate, Count(*) As nSubms
    , (Select Count(*)
        From submissions As S1
        Where S1.userid = S.userId
            And S1.submDate <= S.submDate) As TotalSubms
From submissions As S
Group By S.userid, S.submDate
Order By S.userid, S.submDate
相关问题