SQLite having子句需要group by,但我不需要group by

时间:2016-07-17 06:57:11

标签: android sqlite

专家,

这是我的目标:

从查询中获取A的值,其中B = max(B),如果查询返回0行,则设置为999999。

如果使用方法1,语法错误,因为没有group by子句,但我不需要组。

如果使用方法2,当CONDITIONS为假,即0行时,cursor.getCount()== 1> 0,则无法获得999999。

我能想到的一种方法是在tb中添加C列设置值'constant',然后在方法1中按C添加group。 但这完全不是恩典。

我该怎么办?感谢。

方法1:

Red Mark

方法2:

    Cursor cursor = db.rawQuery("select A, B " +
            "from tb " +
            "where "CONDITIONS" + 
            "having B=max(B)", null);

    cursor.moveToFirst();
    valueA = cursor.getDouble(0);  
    if (cursor.getCount()==0) valueA = 999999;
    cursor.close();

3 个答案:

答案 0 :(得分:1)

  1. 您应该在select子句中放置'max(b)'函数,因为这是查找聚合的最佳方法。

  2. 即使值为NULL,您将在结果游标中至少获得一行。因此,您应该从光标读取'max(b)'的值,然后添加逻辑。

答案 1 :(得分:0)

在第一种方法中,您使用的是与GROUP BY关键字一起使用的关键字。所以代码会给你错误。

有关键字示例:

SELECT * FROM Students GROUP BY name HAVING count(name) < 2;

您可以使用以下命令:

SELECT column_name FROM table_name where MAX(column_name);

    cursor.moveToFirst();
    if (cursor.getCount()<1){
    valueA= 999999;
    }else{
     valueA= cursor.getDouble(0);  
    }
    cursor.close();

答案 2 :(得分:0)

如果使用组功能,则必须使用group by。

您可以像这样使用子查询..

http://localhost:4444/selenium-server/driver?cmd=getLogMessages