我希望在我的表中使用多行max(id).当它返回时NULL- 如果表中没有行 - 我想返回0.当有行时我想返回max(id) + 1.
我的行从0开始编号并自动增加.
这是我的发言:
SELECT CASE WHEN MAX(id) != NULL THEN (MAX(id) + 1) ELSE 0 END FROM words
Run Code Online (Sandbox Code Playgroud)
但它总是让我回归0.我做错了什么?
Vol*_*erK 237
您可以使用查询实际行数
SELECT Count(*) FROM tblName请参阅https://www.w3schools.com/sql/sql_count_avg_sum.asp
Ste*_*eet 12
如果你想使用MAX(id)而不是count,在阅读了Pax的注释后,下面的SQL将为你提供你想要的
SELECT COALESCE(MAX(id)+1, 0) FROM words
Run Code Online (Sandbox Code Playgroud)
在SQL中,NULL = NULL为false,您通常必须使用IS NULL:
SELECT CASE WHEN MAX(id) IS NULL THEN 0 ELSE (MAX(id) + 1) END FROM words
Run Code Online (Sandbox Code Playgroud)
但是,如果你想要行数,你应该使用,count(id)因为你的解决方案将给出10,如果你的行是(0,1,3,5,9)它应该给5.
如果你可以保证你总是从0到N的id,那么max(id)+1 可能会更快,具体取决于索引实现(遍历平衡树的右侧而不是遍历整个树可能会更快,计数.
但这是特定于实现的,我建议不要依赖它,尤其是因为它将您的性能锁定到特定的DBMS.
不确定我是否理解你的问题,但 max(id) 根本不会给你行数。例如,如果您只有一行 id = 13(假设您删除了前几行),则 max(id) = 13 但行数为 1。正确(且最快)的解决方案是使用数数()。顺便说一句,如果您想知道为什么会有星星,那是因为您可以根据标准计算行数。
| 归档时间: |
|
| 查看次数: |
143120 次 |
| 最近记录: |