如何计算名称并将其作为SQL中的列插入?

时间:2017-06-27 21:03:31

标签: database sqlite

我在SQLite中有一个表,它有两列(名称和年龄)。像这样:

Ann 29
约翰30 马克14
安18 布莱恩45 布莱恩21 Brian 19

我想在此表中添加第三列,并显示此名称重复的次数(我不关心年龄)。像这样:

Ann 29 2
约翰30 1 马克14 1 安18 2 Brian 45 3
Brian 21 3
布莱恩19 3

我怎样才能在SQL(SQLite)中做到这一点?

3 个答案:

答案 0 :(得分:2)

使用select sql示例计算重复的名称,如下所示:

SELECT name, age, (SELECT count(*) FROM tableName t2 WHERE t2.name = t1.name) as repeated
FROM tableName t1

或添加新列并使用update sql计算重复名称:

UPDATE tableName t1
SET repeated = (SELECT count(*) FROM tableName t2 WHERE t2.name = t1.name)

答案 1 :(得分:1)

  

注意:如果您正在寻找熟食代码,请不要阅读。

这是一个三步过程,因为你已经有一个填充了数据的表,否则只需按照第三步。

  1. 首先使用默认值1修改表结构。
  2. 然后对表运行更新查询并更新计数列的值(提示:尝试使用count()函数,这将有所帮助)。
  3. 插入新列时,请创建一个触发器,用于计算值并在插入后自动更新该条目的计数。

答案 2 :(得分:1)

您可以使用名称及其计数来查询从现有表格和即时表格中加入的表格:

select *
from names 
left join
 (select name, count(name)
  from names
  group by name)
using(name);

输出(我在其中一个Anns的年龄值中有一个拼写错误):

Ann|29|2
John|30|1
Mark|14|1
Ann|29|2
Brian|45|3
Brian|21|3
Brian|19|3

MCVE:

PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE names (name varchar(10), age int);
INSERT INTO names VALUES('Ann',29);
INSERT INTO names VALUES('John',30);
INSERT INTO names VALUES('Mark',14);
INSERT INTO names VALUES('Ann',29);
INSERT INTO names VALUES('Brian',45);
INSERT INTO names VALUES('Brian',21);
INSERT INTO names VALUES('Brian',19);
COMMIT;