- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下架构:
User:
---
NHẬN DẠNG
---
Tasks:
-------------------
ID | classification
-------------------
Timesheets:
------------------------
ID | task_id | user_id
------------------------
TimesheetItem:
--------------------------------
ID | timesheet_id | hours | date
--------------------------------
协会:
class User
has_many :timesheets
kết thúc
class Task
has_many :timesheets
kết thúc
class Timesheet
has_many :timesheet_items
belongs_to :user
belongs_to :task
kết thúc
class TimesheetItem
belongs_to :timesheet
kết thúc
分类可以是“可计费”或“不可计费”。现在我需要为每个用户找到可计费和不可计费时间的总和,如下所示:
-----------------------------------
|user_id | billable | nonbillable |
-----------------------------------
我在 Rails 中所做的是:
User.joins(:timesheets, :timesheets => :task, :timesheets => :timesheet_items)
.select("SUM(CASE
WHEN tasks.task_classification = 'Billable'
THEN timesheet_items.hours
ELSE
0
END) as billable,
SUM(CASE
WHEN tasks.task_classification = 'Non-Billable'
THEN timesheet_items.hours
ELSE 0
END) as nonbillable")
但是 MySQL 给出错误“tasks.classification”是未知列。查看正在生成的查询,这是可以理解的:
SELECT SUM(CASE WHEN tasks.classification = 'Billable' THEN hours ELSE 0 END) as billable, SUM(CASE WHEN tasks.classification = 'Non-Billable' THEN hours ELSE 0 END) as nonbillable FROM `users` INNER JOIN `timesheets` ON `timesheets`.`user_id` = `users`.`id` INNER JOIN `timesheet_items` ON `timesheet_items`.`timesheet_id` = `timesheets`.`id`
正如您所看到的,任务表没有被加入。
我该如何实现这一目标?谢谢。
biên tập:
我继续进行了一个简单的 SQL 查询,该查询连接了任务表来获取结果,因为该数据仅在一个地方使用,并且很少使用。
但现在我需要按月对小时数进行分组,并找出每个用户记录的计费小时数和非计费小时数。例如。
kết quả:
-----------------------------------------------
user_id | month | BillableHrs | NonBillableHRS|
-----------------------------------------------
我尝试过group(user_id, MONTH(date))
但是..结果很奇怪。我怎样才能获得此类信息?
顺便说一句,将连接更改为:
joins(:timesheets, :timesheets => [:task, :timesheet_items])
解决了未找到列的问题:)
我终于找到了这个解决方案。有什么优化的想法吗?
LỰA CHỌN
users.id as user_id,
users.name as user_name,
CONCAT(MONTHNAME(date)," ",YEAR(date)) as month,
SUM( CASE
WHEN tasks.task_classification = "Billable"
THEN hours
ELSE
0
END ) as blb_sum,
SUM( CASE
WHEN tasks.task_classification = "Non-Billable"
THEN hours
ELSE
0
END ) as nblb_sum
FROM `users`
INNER JOIN `timesheets` ON `timesheets`.`user_id` = `users`.`id`
INNER JOIN `timesheet_items` ON `timesheet_items`.`timesheet_id` = `timesheets`.`id`
INNER JOIN `tasks` ON `timesheets`.`task_id` = `tasks`.`id`
WHERE
timesheet_items.date >= '2013-11-1' AND
timesheet_items.date <= '2013-11-31'
1 Câu trả lời
由于如果将其表示为 activerecord 和 SQL 的混合体,那么这将是一些相当丑陋的代码,因此一种想法是将复杂查询定义为 View 并将其引用为模型。
做起来非常简单 - 如果这是用户级别的一组指标,则按照以下方式构建一个 View :
create view user_billing_metrics
BẰNG
select user.id user_id,
sum(case ... blah blah) billable_hours,
sum(case ... blah blah) unbillable_hours
from ...
然后创建一个只读模型...
class UserBillingMetric < ActiveRecord::Base
belongs_to :user, :inverse_of => :user_billing_metric
def read_only?
ĐÚNG VẬY
kết thúc
kết thúc
然后...
lớp Người dùng < ActiveRecord::Base
has_one :user_billing_metric, :inverse_of => :user
delegate :billable_hours , :to => :user_billing_metric
delegate :unbillable_hours, :to => :user_billing_metric
def read_only?
ĐÚNG VẬY
kết thúc
kết thúc
然后您可以:
u = User.find( ...)
u.billable_hours
...或...
u = User.find( ...)
hours= u.user_billing_metric
vân vân.
可能在那里犯了一个愚蠢的打字错误。
它的一个很好的功能是您可以,例如:
users_to_fire = User.joins(:user_billing_metric).
where(:user_billing_metrics => {:billable_hours = 0})
再说一次,可能是愚蠢的拼写错误。
将其推送到数据库非常有效,比尝试通过 Rails 运行它要高效得多。一个好的查询优化器不会计算 View 中不需要的表达式,甚至不会执行逻辑上冗余的连接。
无论如何,只是将其发布以征求意见。我知道将业务逻辑放在数据库层并不符合每个人的口味,但它可以保持干燥,并且我在自己的应用程序中遇到了这样的情况,出于性能原因,这绝对是唯一的选择。
关于mysql - 连接三个表(2 级)并根据条件求和 - SQL Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20494082/
Tôi biết câu hỏi này có thể đã được hỏi trước đây, nhưng tôi đã kiểm tra tất cả các câu hỏi và tôi nghĩ trường hợp của tôi khác (xin hãy thông cảm). Vì vậy, tôi có hai tập dữ liệu, tập đầu tiên là tập dữ liệu thử nghiệm và tập thứ hai là các dự đoán (giá trị dự đoán, đó là lý do tại sao không có cột dữ liệu) mà tôi đã lưu trong một khung dữ liệu. Tôi muốn hợp nhất hai cái đó
Với sự trợ giúp của phương thức .loc, tôi xác định các giá trị trong một cột của khung dữ liệu Panda dựa trên các giá trị trong một cột khác của cùng khung dữ liệu đó. Đoạn mã dưới đây để bạn tham khảo: var1 = output_df['Player'].loc[out
Khi tôi sử dụng WinSCP trong Windows để kết nối với VMware thông qua Ubuntu, nó báo: Máy chủ đã từ chối kết nối SFTP, nhưng nó
Tôi đang phát triển một ứng dụng Android sử dụng dịch vụ web xml. Nó hoạt động tốt khi được kết nối trong mạng wi-fi, nhưng không thành công (http 404 không tìm thấy) khi được kết nối trong mạng 3G. Điều này không chỉ xảy ra ở các thiết bị. Để đo lường
Tôi có một tệp XIB chứa điều khiển của tôi, được tải vào Interface Builder (Xcode 4.0.2 trên Snow Leopard). Chủ sở hữu của tệp được đặt thành someClassController
Tôi quản lý cơ sở dữ liệu MySQL trên máy cục bộ của mình và kết nối với nó thông qua C bằng cách chạy chương trình sau: #include #include #include int main(int argc, char** arg
Tôi không hiểu tại sao mỗi lần có ai đó truy cập vào một trang trên trang web của tôi thì lại có một kết nối mới đến cơ sở dữ liệu được mở ra. Cuối cùng, tôi tải đến khoảng 300 và gặp lỗi và trang không tải được nữa. Cách tôi nghĩ nó nên hoạt động là, tôi đặt maxIdle thành 30, nghĩa là
Đang tìm cách dọn dẹp các tệp .txt trong NMEA GPS. Mã hiện tại của tôi như sau. xóa = ['$GPGGA', '$GPGSA', '$GPGSV', '$PSRF156', ] tìm kiếm
Tôi có một URL, một tên người dùng và một mật khẩu. Tôi muốn thiết lập kết nối VPN trong C# .Net WinForms. Bạn có thể cho tôi biết phải bắt đầu từ đâu không? Có API của bên thứ ba nào không? Các ví dụ về mã sẽ được đánh giá cao... Câu trả lời hay nhất Bạn có thể làm như thế này
Có cách nào tốt hơn để chuyển đổi một vectơ chuỗi thành một vectơ ký tự có ký tự kết thúc bằng số không giữa các chuỗi không? Vì vậy, nếu tôi có một vectơ chứa các chuỗi sau, "test", "my", "string", thì tôi muốn nhận được một
Tôi đang viết một thư viện liên tục kiểm tra kết nối của thiết bị Android và gửi lệnh gọi lại khi thiết bị được kết nối, ngắt kết nối hoặc kết nối Internet chậm. https://github.com/muddassir235/connection_ch
Hệ điều hành của tôi: Centos 7 + CLOUDLINUX 7.7 Khi tôi thử đăng nhập vào Mysql từ máy chủ [root@server3 ~]# Mysql -u root -h localhost -P 330
Tôi gặp lỗi: Puma tìm thấy lỗi này: Không thể mở kết nối TCP tới localhost:9200 (Kết nối bị từ chối - kết nối (2) cho cổng 'localhost' 9200) (Faraday::ConnectionFailed) trong
Xin hãy cho tôi giải pháp khắc phục lỗi sau. Đây là một ứng dụng trò chuyện.... Mã và lỗi như sau:: conversations_controller.rb def create if Conversation.bet
Tôi muốn nối dữ liệu từ hai ô thành một ô. Tôi cũng muốn chỉ kết hợp những ô có cùng ID. ID nhiệm vụ Tên 4355.2 Người tham gia 4355.2 Người lãnh đạo 4462.1 Trực tuyến 4462.1 Nhanh 4597.1
Tôi thường cần nối các trường trong TSQL... Hai vấn đề mà TSQL buộc bạn phải xử lý khi sử dụng toán tử "+" là Thứ tự ưu tiên kiểu dữ liệu và giá trị NULL. Với thứ tự ưu tiên kiểu dữ liệu, vấn đề nằm ở lỗi chuyển đổi. 1)
Có ứng dụng Facebook Connect dành cho iPad hoặc iPhone không? Ý tưởng là đăng nhập vào ứng dụng và sau đó có thể xem người dùng Facebook nào của tôi cũng đang sử dụng ứng dụng và các tính năng của nó. Câu trả lời tốt nhất là có.
Tôi đang gặp vấn đề kỳ lạ khi nối hoặc in chuỗi. Tôi có một char * mà tôi có thể thiết lập thành một trong nhiều giá trị từ một chuỗi ký tự. char *myStrLiteral = NULL; ... nếu (blah) myStrLiteral
Đối với dữ liệu sau - hãy cho $x := "Yahooooo !!!! Chọn một số - " hãy cho $y := 1 2 3 4 5 6 7 Tôi muốn lấy
Tôi đang xem video đào tạo về Perl của UDEMY, nhưng video không rõ ràng và có vẻ như có lỗi. Bài đào tạo này sẽ hướng dẫn cách nối 2 chuỗi bằng ví dụ sau: #!usr/bin/perl print $str = "Hi";
Tôi là một lập trình viên xuất sắc, rất giỏi!