Tag: sql

多个左连接 – 怎么样?

我有一个在Heroku运行的Rails应用程序,我正在尝试计算用户的排名(位置)到高分榜。 该应用程序是用户互相下注并且可以开始下注(创建选项)的地方,或者他们可以对已经创建的选项下注(通过下注)。 我有以下SQL,它应该根据他们在Choices和Bets上的总奖金给我一系列用户..但它给了我一些错误的总胜利,我认为问题出在Left Joins中,因为如果我重写SQL到只包含选择或赌注表然后我工作得很好.. 任何有关如何重写SQL以正常工作的指针:) SELECT users.id, sum(COALESCE(bets.profitloss, 0) + COALESCE(choices.profitloss, 0)) as total_pl FROM users LEFT JOIN bets ON bets.user_id = users.id LEFT JOIN choices ON choices.user_id = users.id GROUP BY users.id ORDER BY total_pl DESC 结果: +—————+ | id | total_pl | +—————+ | 1 | 830 | | 4 | 200 | […]

map(&:id)work但not pluck(:id)

在我的部分代码中,我需要获取用户的id,但是pluck不会抓住它们。 只有map(&:id)可以做到。 我想知道为什么。 我写了一个快速而又脏的代码块来查找发生了什么 def remove_users user_ids p users_to_remove.class users_to_remove = self.users.where(id: user_ids) if users_to_remove.present? self.users -= users_to_remove self.save p users_to_remove.class p users_to_remove Rails::logger.info “\n#{users_to_remove}\n” users_to_remove_map = users_to_remove.map(&:id) p users_to_remove_map Rails::logger.info “\nmap id: #{users_to_remove_map}\n” users_to_remove_pluck = users_to_remove.pluck(:id) p users_to_remove_pluck Rails::logger.info “\npluck id: #{users_to_remove_pluck}\n” #… end self.user_ids end 谁在我的test.log中返回 # map id: [144004] (0.3ms) SELECT “users”.”id” […]

DISTINCT ON查询w / ORDER BY列的最大值

我的任务是将一个Rails应用程序从MySQL转换为Postgres asap并遇到一个小问题。 活动记录查询: current_user.profile_visits.limit(6).order(“created_at DESC”).where(“created_at > ? AND visitor_id ?”, 2.months.ago, current_user.id).distinct 生成SQL: SELECT visitor_id, MAX(created_at) as created_at, distinct on (visitor_id) * FROM “profile_visits” WHERE “profile_visits”.”social_user_id” = 21 AND (created_at > ‘2015-02-01 17:17:01.826897’ AND visitor_id 21) ORDER BY created_at DESC, id DESC LIMIT 6 我在使用MySQL时非常自信,但我老实说是Postgres的新手。 我认为这个查询失败的原因有很多。 我认为需要先区分。 我不知道如何通过max函数的结果来订购 我甚至可以使用这样的max函数吗? 此查询的高级目标是返回用户的6个最新配置文件视图。 任何关于如何修复此ActiveRecord查询(或它的结果SQL)的指针将不胜感激。

在SQL中查找重叠日期

每个注册都有一个start_date和end_date。 如何以任何方式找到与另一个重叠的注册。 谢谢!

如何在Postgres的Rails中按天分组和计数?

这个问题我如何按天而不是按日期分组? 展示了如何在Ruby中进行分组。 这可行,但对于大量记录来说会非常慢。 如何做到这一点,以便按日期分组和计算:created_at发生在Postgres内?

获取最大预订数量

我有一个ParkingLot模型。 停车场有很多可用的lots 。 然后,用户可以预订停车场一天或多天。 因此我有Booking模式。 class ParkingLot has_many :bookings end class Booking belongs_to :parking_lot end 简化的用例 停车场 鉴于有5个可用地段的停车场: 预订 鲍勃从周一到周日预订了一个地方 苏在周一,周三和周五分别预订一次 亨利只在星期五上书。 由于周末很忙,其他4人从周六到周日预订。 编辑 预订有一个start_date和一个end_date ,因此Bob的预订只有一个条目。 Mon-Sun 。 另一方面,Sue确实有三个预订,所有预订都在同一天开始和结束。 Mon-Mon , Wed-Wed , Fri-Fri 。 这为我们提供了以下预订数据: 为简单起见,我将使用初始( B )和工作日( Mon )来代替user_id( 1 )和日期( 2015-5-15 )。 –––––––––––––––––––––––––––––––––––––––––– | id | user_id | start_date| end_date| … | […]

从复杂的Join,Sum和Group查询中调用ActiveRecord友好代码

问题 你好, 我没有运气试图将这个SQL语句分解为ActiveRecord / Rails友好代码,我想学习如何在这种情况下避免使用find_by_sql语句。 场景我有用户在执行操作时创建审核。 每次审核都是特定的audit_activity。 根据score_weight,每个audit_activity值得一定数量的积分。 我需要根据他们累计的audit_activity score_weights找到每个用户的总分。 最终我需要对它们进行排名,这意味着也要对它进行排序。 我的代码这是我的sql和有问题的表的简化版本。 有什么想法吗? 带有完整列名的SQL(为清楚起见) SELECT users.id, u.email, SUM(audit_activity.score_weight) FROM users JOIN audits ON users.id = audits.user_id JOIN audit_activities ON audit_activities.id = audits.audit_activity_id GROUP BY users.id; 模型:用户,审计,AuditActivity 用户字段:id,email class User < ActiveRecord::Base include Clearance::User has_many :audits end 审计字段:id,user_id,audit_activity_id class Audit < ActiveRecord::Base belongs_to :user belongs_to :audit_activity […]

GROUP_BY内的活动记录限制

SCENARIO我有一张桌子,上面有一张带有用户表的post。 我希望能够获取所有post并将其分组给用户,但我想为每个用户设置10个限制。 class Post < ActiveRecord::Base belongs_to :user end class User 10).group_by(&:user) 有什么想法吗? 我是否必须编写自定义SQL,或者Active Record可以执行此操作吗?

Rails:两个’where’查询 – 每个查询单独工作,但不能一起工作

我想写一些类似的东西: @meeting_requests = Meeting.where(‘meeting_time >= ? AND requestee_id IS ? AND status = ?’, Date.today, nil, “Active”) .joins(:requestor) .where(‘birthyear >= ? AND birthyear <= ?', current_user.birthyear – 10, current_user.birthyear + 10 ) 这有效: @meeting_requests = Meeting.where(‘meeting_time >= ? AND requestee_id IS ? AND status = ?’, Date.today, nil, “Active”) 这有效: @meeting_requests = Meeting.joins(:requestor) .where(‘birthyear >= […]

Rails和MySQL语法错误与执行块中的多个SQL语句

对于使用MySQL的应用程序,我在Rails迁移中有以下代码: execute <<-SQL ALTER TABLE properties ADD name VARCHAR(255) NOT NULL; ALTER TABLE properties ADD CONSTRAINT fk_properties_name FOREIGN KEY (name) REFERENCES valid_property_names (property_name); SQL 当我运行迁移时,我收到以下错误: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘ALTER TABLE properties 为什么我会收到此错误,如何解决?