2017-08-15 35 views
2

我想使用dbFlow選擇最常用的名稱。 在SQLite的將是:DBFlow Android選擇最常見的值

SELECT `Employee`.name 
FROM `Employee` 
GROUP BY `Employee`.name 
HAVING COUNT(*) = 
    (SELECT MAX(cn) FROM 
    (SELECT `Employee`.name, COUNT(*) AS cn 
     FROM `Employee` 
     GROUP BY `name`)) 

我tryed:

 SQLite.select(Employee_Table.name) 
       .from(Employee.class) 
       .groupBy(Employee_Table.name) 
       .having(Method.count().eq(
         SQLite.select(
           Method.max("cn")).from(
           SQLite.select(Employee_Table.name, Method.count().as("cn")) 
             .from(Employee.class) 
             .groupBy(Employee_Table.name) 
         ) 
         ) 
       ) 

但Method.max不接受別名。或者我應該只運行一個原始查詢?

回答

1

Method.max只接受屬性 您可以使用。

public static Property<Long> name(String value) { 
    return new Property<Long>(null, value) { 
     @Override 
     public String toString() { 
      return nameAlias.nameRaw(); 
     } 
    }; 
} 

用法:

Method.max(name("cn")) 
+0

謝謝,它的工作原理,但我不得不改變我的查詢。 – kkk