Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 基于组的总数更新秩列_Sqlite_Ranking - Fatal编程技术网

Sqlite 基于组的总数更新秩列

Sqlite 基于组的总数更新秩列,sqlite,ranking,Sqlite,Ranking,我在SQLite中编写了以下代码: 现在我的问题是,如何根据customerNumber对payments group totalamount的排名来更新表中的rank列?编辑删除的SQL Server代码,SQLite不支持update语句中的联接: 我认为这应该可以: 如果存在列组,则删除表; 创建临时表列组 秩整数主键, customerNumber real, 完全真实 ; 入伍 选择null、customerNumber、totalamount作为总计 来自付款 按客户编号分组 按总说

我在SQLite中编写了以下代码:

现在我的问题是,如何根据customerNumber对payments group totalamount的排名来更新表中的rank列?

编辑删除的SQL Server代码,SQLite不支持update语句中的联接:

我认为这应该可以:

如果存在列组,则删除表; 创建临时表列组 秩整数主键, customerNumber real, 完全真实 ; 入伍 选择null、customerNumber、totalamount作为总计 来自付款 按客户编号分组 按总说明排序; 更新付款集 排名= 从列组中选择列组 其中customerNumber=payments.customerNumber ; 从付款中选择*; 增加:

在一条语句中,这是一种非常肮脏的方法,它使用非常特定的子查询对每个客户的某类SQLite行号进行排序。正如我所说的,有很多SYBQ查询,但这是在一个查询中不使用join in update而工作的代价

更新付款集 排名= 选择 从中选择count0,选择totalamount作为t,选择customerNumber作为c 从付款组按客户编号按t描述t1排序 其中t1.t>=t2.t作为秩 从中,选择totalamount as t,customerNumber as c from payments group by customerNumber order by t desc t2,其中t2.c=付款。客户编号按t2.t描述 ;
它只是将表更新为rank=total。但我想要的是,根据总数给customerNumber评分。i、 e“总计”最高的customerNumber将排名为“1”。第二个最高级将具有排名“2”。此外,查询只在从代码中移除之后才执行。我已经更改了它,但我不确定中间的临时表是否对您有好处——这不是一个语句更新。是SQL Server习惯,抱歉。感谢您的快速响应:。此声明有效,但不符合我的要求。如果可以,请帮助我在一个update语句中编写代码,或者至少让我知道在一个update语句中编写代码是否可行。我是SQL/SQLite的新手。太棒了。非常感谢你的帮助
CREATE TABLE payments (
  customerNumber REAL NOT NULL,
  checkNumber TEXT NOT NULL,
  paymentDate TEXT NOT NULL,
  amount REAL NOT NULL,
  rank REAL default 0,
  PRIMARY KEY  (customerNumber,checkNumber)
);

insert  into payments(customerNumber,checkNumber,paymentDate,amount) values(103,'HQ336336','2004-10-19 00:00:00',6066.78);
insert  into payments(customerNumber,checkNumber,paymentDate,amount) values(103,'JM555205','2003-06-05 00:00:00',14571.44);
insert  into payments(customerNumber,checkNumber,paymentDate,amount) values(112,'BO864823','2004-12-17 00:00:00',14191.12);
insert  into payments(customerNumber,checkNumber,paymentDate,amount) values(112,'HQ55022','2003-06-06 00:00:00',32641.98);
insert  into payments(customerNumber,checkNumber,paymentDate,amount) values(121,'MA302151','2004-11-28 00:00:00',34638.14);
insert  into payments(customerNumber,checkNumber,paymentDate,amount) values(121,'KI831359','2004-11-04 00:00:00',17876.32);
insert  into payments(customerNumber,checkNumber,paymentDate,amount) values(161,'KG644125','2005-02-02 00:00:00',12692.19);
insert  into payments(customerNumber,checkNumber,paymentDate,amount) values(161,'NI908214','2003-08-05 00:00:00',38675.13);
insert  into payments(customerNumber,checkNumber,paymentDate,amount) values(181,'CM564612','2004-04-25 00:00:00',22602.36);
insert  into payments(customerNumber,checkNumber,paymentDate,amount) values(181,'GQ132144','2003-01-30 00:00:00',5494.78);