[英]Room DB - DISTINCT for combination of 2 fields (GPS)
如何從 RoomDB 獲取獨特的 GPS 位置?
我的實體有GPS經緯度
@Entity
public class Location {
@PrimaryKey(autoGenerate = true)
public int id;
@ColumnInfo(name = "GPS_lat")
double GPSlat;
@ColumnInfo(name = "GPS_lon")
double GPSlon;
我的 dao 查詢
// Read all
@Query("SELECT * FROM location")
List<Location> getLocations();enter code here
// Read only unique combination of GPS location
?
我在玩 DISTINCT 或 group by,但仍然不知道如何將它們同時應用於 2 dB 列,謝謝
DISTINCT應用於整個提取的行,因此您將僅限於提取 2 列(這可能沒什么用)。
GROUP BY將是您想要的,您只需使用
@Query("SELECT * FROM location GROUP BY GPS_lat,GPS_lon")
請注意,對於已有效壓縮為一行的所有行的值不同的列,其他列的內容應被視為不明確。 但是,諸如sum
、 count
之類的聚合函數會考慮列值。
考慮本機 SQL 中的這個例子:-
DROP TABLE IF EXISTS locations;
CREATE TABLE IF NOT EXISTS locations (name TEXT, GPS_long INTEGER, GPS_lat INTEGER);
INSERT INTO locations VALUES ('place1',1,1),('place2',2,1),('place3',1,1),('place4',2,1),('place5',3,3),('place6',3,3),('place7',1,1),('place8',2,1);
SELECT DISTINCT * FROM locations;
SELECT DISTINCT GPS_long,GPS_lat FROM locations;
SELECT
*,
group_concat(name) AS all_places, -- aggregate function
count(*) AS same_location -- aggregate function
FROM locations
GROUP BY GPS_long,GPS_lat;
DROP TABLE IF EXISTS locations;
這個
結果是:-
第一個查詢(所有列上的 DISTINCT)
第二個查詢(GPS_long 和 GPS_lat 列上的 DISTINCT,即僅提取那些列)
第三個查詢(所有列 + 使用 GROUP BY GPS_long、GPS_lat)
group_concat
function 如何獲取同一位置的所有地點的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.