我是否使用count(*)来计算记录,或者直接将count列添加到我的表中

时间:2017-07-03 11:47:52

标签: mysql sql

我的团队负责人坚持要求在表格中添加天条目计数列并定期更新。像这样的东西

  1. 获取以前的记录
  2. 取计数列值
  3. 将.5添加到该值
  4. 并更新当前记录中的计数记录
  5. 像这样

    • 0.5
    • 1
    • 1.5
    • 2 //每次我必须获得前一个值来创建新值,这意味着选择陈述,然后更新陈述

    虽然我认为这不是正确的方法。我可以计算[使用Count(*)]记录显示日期,这很容易为什么我懒得添加它,使用更新命令知道以前的条目等。他告诉我们可以直接计数而不查询一堆记录的原因表现明智是快速的。你是怎么做到的?什么是正确的方法?

3 个答案:

答案 0 :(得分:1)

如果我理解正确,您只需要row_number()除以2:

select t.*,
       (row_number() over (order by ??) ) / 2.0
from t;

??适用于任何列指定所需表格的顺序。

答案 1 :(得分:1)

gremlin> traverseAndFilter = out().has('date',lte(1470787200L)).
......1>                       order().
......2>                         by('date',decr).limit(1);[] 
gremlin> g.V().has('name','car').
......1>   repeat(local(traverseAndFilter.clone()).out()).
......2>     emit().
......3>   local(local(traverseAndFilter.clone())).
......4>   tree().by('name')
==>[car:[car revision 1:[front right door:[front right door revision 1:[]],engine:[engine revision 1:[]],front left door:[front left door revision 1:[]]]]]

为了获得更好的性能,请将指数添加到YourTable的COUNT_COLUMN列。

答案 2 :(得分:0)

嗨Fizan,

您可以使用功能实现此目的。您可以创建一个函数来获取结果值并在列中更新它。像这样 -

CREATE function Get_Value_ToBeUpdated
RETURN DECIMAL(10,2)
AS
BEGIN
    DECLARE result decimal (10,2);
    DECLARE previousValue decimal (10,2);
    DECLARE totalCount int;

    SELECT previousValue = SELECT MAX(columnName) FROM YourTable order by primaryColumn desc
    SELECT totalCount    = SELECT COUNT(1) FROM YourTable

    SET result = ISNULL(previousValue,0) + ISNULL(totalCount,0)

    RETURN result;
END

UPDATE YourTable SET COLUMNNAME  = DBO.Get_Value_ToBeUpdated() WHERE Your condition

谢谢:)