在Golang中统计行数

14

我想使用Go显示数据库中的行数。我该如何显示行数?

count, err := db.Query("SELECT COUNT(*) FROM main_table")

1
有什么问题吗? - simon
我需要知道表中有多少行。不检查数据库中是否存在任何用户和密码。 - Отгонбаяр Ламжав
人们不会因为不知道答案而对问题进行负评。他们会因为“没有展示任何研究努力;问题不清晰或者无用”而对问题进行负评。责怪那些给你适当反馈的人是荒谬的。 - Jonathan Hall
1
在这种情况下,你被 downvote 的原因可能是没有解释你遇到的问题。正如第一条评论所建议的那样,你只展示了一行代码,看起来它实现了你想要的功能,但没有解释它为什么不能满足你的期望。 - Jonathan Hall
2个回答

31

查询将把一行结果返回给变量count。因此,接下来您需要做的是读取该行并使用函数Scan()将结果分配给一个新变量。就是这样。

rows, err := db.Query("SELECT COUNT(*) FROM main_table")
if err != nil {
    log.Fatal(err)
}
defer rows.Close()

var count int

for rows.Next() {   
    if err := rows.Scan(&count); err != nil {
        log.Fatal(err)
    }
}

fmt.Printf("Number of rows are %s\n", count)

最好的选择是使用QueryRow(),因为您只希望读取一行。代码将如下所示。

var count int

err := db.QueryRow("SELECT COUNT(*) FROM main_table").Scan(&count)
switch {    
case err != nil:
    log.Fatal(err)
default:
    fmt.Printf("Number of rows are %s\n", count)
}

当我在HTML模板上打印计数数字时,它看起来是0015。为什么15前面会有两个零? - Отгонбаяр Ламжав
没有代码,我无法真正帮助你弄清楚这是为什么。 - chanioxaris

0

我注册了一个账号,只是为了分享这个经验,因为我的大型数据集在不断追加时会拖慢程序的速度。我想把rowcount放在行中,我知道一定有类似的方法,只需要找到它。

SELECT 
count(1) OVER(PARTITION BY domain_id) AS rowcount,
subscription_id,
domain_id,
...
FROM mytable 
WHERE domain_id = 2020

我以前从未使用过这个命令,但它将添加共享此参数的结果集的计数。将其设置为查询WHERE之一会使其成为总行数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接