【问题标题】:SQLite sub query sum of column in where clauseSQLite子查询where子句中列的总和
【发布时间】:2017-10-14 21:57:59
【问题描述】:

我正在查询数据库以获取过去 24 小时内输入的值的游标。我可以查询并获取我想要的 A_VALUE 列的所有值,但我无法弄清楚如何或在何处正确编写子查询以获取 A_VALUE 列与 where 子句参数的总和并获取其值。任何想法将不胜感激。 (零编码背景,我正在从这个网站和其他网站学习一切)

//获取过去 24 小时内值的当前代码是:

String[] projection = {
            DrinkContract.DrinkEntry._ID,
            DrinkContract.DrinkEntry.COLUMN_A_VALUE,
            DrinkContract.DrinkEntry.COLUMN_TIME_DATE};

    //code to query databse for last 24 hours

    String selection = DrinkContract.DrinkEntry.COLUMN_TIME_DATE + " BETWEEN strftime('%s', 'now', '-1 day') AND strftime('%s','now') ";

    Cursor dayCursor = getContentResolver().query(
            DrinkContract.DrinkEntry.CONTENT_URI,   // Provider content URI to query
            projection,             // Columns to include in the resulting Cursor
            selection,                   // selection clause
            null,
            DrinkContract.DrinkEntry.COLUMN_TIME_DATE); // Default sort order*/

    if (dayCursor == null || dayCursor.getCount() < 1) {
        return;
    }

    // Proceed with moving to the first row of the cursor and reading data from it

    while (dayCursor.moveToNext()) {

        int aValueColumnIndex = dayCursor.getColumnIndex(DrinkContract.DrinkEntry.COLUMN_A_VALUE);
        int drinkTimeDateColumnIndex = dayCursor.getColumnIndex(DrinkContract.DrinkEntry.COLUMN_TIME_DATE);

        // Extract out the value from the Cursor for the given column index
        double aValue = dayCursor.getDouble(aValueColumnIndex);


        System.out.println("The total a value is " + aValue);

【问题讨论】:

  • 总和是单个值,是从多行计算的。查询中其他两列的值应该是多少?
  • 我不需要其他列的总和。从我读过的内容来看,它应该像在 SELECT 或 WHERE 子句中添加 sum(DrinkContract.DrinkEntry.COLUMN_A_VALUE) 或 total(DrinkContract.DrinkEntry.COLUMN_A_VALUE) 一样简单,以获得该特定列的总和或总计,但我可以似乎没有任何版本的工作。感谢您的回复
  • 请提供一些示例数据和您想要的输出。 (请参阅How to format SQL tables in a Stack Overflow post? 了解如何添加。)
  • 哦,伙计。终于让它工作了。感谢 CL 的回复。我的大脑终于把 2 和 2 放在了一起。对于任何有同样问题的人。我将此添加到投影线: String[] projection = { DrinkContract.DrinkEntry._ID, DrinkContract.DrinkEntry.COLUMN_TIME_DATE, "total("+DrinkContract.DrinkEntry.COLUMN_A_VALUE+") AS totalA "};然后用这个查询列总数: int aValueColumnIndex = dayCursor.getColumnIndex("totalA");

标签: android sqlite subquery


【解决方案1】:

//工作代码

 String[] projection = {
        DrinkContract.DrinkEntry._ID,
        DrinkContract.DrinkEntry.COLUMN_TIME_DATE,
            "total("+DrinkContract.DrinkEntry.COLUMN_A_VALUE+") AS totalA "};

//code to query databse for last 24 hours

String selection = DrinkContract.DrinkEntry.COLUMN_TIME_DATE + " BETWEEN strftime('%s', 'now', '-1 day') AND strftime('%s','now') ";

Cursor dayCursor = getContentResolver().query(
        DrinkContract.DrinkEntry.CONTENT_URI,   // Provider content URI to query
        projection,             // Columns to include in the resulting Cursor
        selection,                   // selection clause
        null,
        DrinkContract.DrinkEntry.COLUMN_TIME_DATE); // Default sort order*/

if (dayCursor == null || dayCursor.getCount() < 1) {
    return;
}

// Proceed with moving to the first row of the cursor and reading data from it

while (dayCursor.moveToNext()) {

   int aValueColumnIndex = dayCursor.getColumnIndex("totalA");
    int drinkTimeDateColumnIndex = dayCursor.getColumnIndex(DrinkContract.DrinkEntry.COLUMN_TIME_DATE);

    // Extract out the value from the Cursor for the given column index
    double aValue = dayCursor.getDouble(aValueColumnIndex);


    System.out.println("The total a value is " + aValue);

【讨论】:

    猜你喜欢
    • 2021-04-07
    • 2012-01-23
    • 2018-03-06
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多