Tôi muốn buộc trơn để tạo ra các truy vấn nhưLàm thế nào để thực hiện quy tụ với trơn
select max(price) from coffees where ...
Nhưng slick's documentation không giúp
val q = Coffees.map(_.price) //this is query Query[Coffees.type, ...]
val q1 = q.min // this is Column[Option[Double]]
val q2 = q.max
val q3 = q.sum
val q4 = q.avg
Bởi vì những q1-q4 không truy vấn, tôi có thể không nhận được kết quả nhưng có thể sử dụng chúng bên trong các truy vấn khác.
Tuyên bố này
for {
coffee <- Coffees
} yield coffee.price.max
tạo truy vấn đúng, nhưng bị phản đối (tạo ra cảnh báo: "phương pháp tối đa trong ColumnExtensionMethods lớp bị phản đối: Sử dụng Query.max thay vì"). Cách tạo truy vấn như vậy mà không có cảnh báo?
Một vấn đề khác là để tổng hợp với nhóm bởi:
"select name, max(price) from coffees group by name"
Cố gắng giải quyết nó với
for {
coffee <- Coffees
} yield (coffee.name, coffee.price.max)).groupBy(x => x._1)
mà tạo ra
select x2.x3, x2.x3, x2.x4 from (select x5."COF_NAME" as x3, max(x5."PRICE") as x4 from "coffees" x5) x2 group by x2.x3
gây lỗi db rõ ràng
column "x5.COF_NAME" must appear in the GROUP BY clause or be used in an aggregate function
Cách tạo truy vấn như vậy?
thay vì '.list.head' bạn có thể làm '.first', IIRC –
Cảm ơn, tôi đã thay đổi nó trong câu trả lời – EECOLOR
Cảm ơn, cả hai ví dụ đều hoạt động, thứ hai tạo truy vấn tối ưu "chọn x2." COF_NAME ", tối đa (x2." PRICE ") từ nhóm" coffees "x2 x2" COF_NAME "", nhưng truy vấn đầu tiên tạo "chọn x2.x3 từ (chọn tối đa (x4. x5) là x3 từ (chọn x6. "PRICE" là x5 từ "cà phê" x6) x4) x2 "- truy vấn với 2 truy vấn phụ thay vì đơn giản" chọn tối đa (x2. "PRICE") từ "cà phê" x2 " được tạo bởi api không được chấp nhận. Có vẻ như các nhà phát triển slick đã không dùng nữa api quá sớm. – Jeriho