【问题标题】:List number of duplicate values列出重复值的数量
【发布时间】:2015-07-06 21:30:50
【问题描述】:

我有以下 Rails ActiveRecord 关联,其中一课有_许多书,书本属于一课。我想运行一个 SQL 命令,它会告诉我有多少课有多本书属于该课。

例如:第 1 课有第 1 册和第 2 册,我想看看发生了多少次。

【问题讨论】:

    标签: sql ruby-on-rails ruby postgresql ruby-on-rails-4


    【解决方案1】:

    #having 将让您执行 #group 过滤掉只有一本书的课程。

    Book.group(:lesson_id).having("count(lesson_id) > 1").count
    

    【讨论】:

      【解决方案2】:

      Book.group(:lesson_id).count 将返回一个散列,其中lesson_id 作为键,书的数量作为值。

      您还可以按照第 4.1.2.3 节中的here 所述实现counter_cache

      【讨论】:

        【解决方案3】:

        就像第一个答案所说,计数器缓存或使用组和计数是简单获取计数的最佳方法。

        但是,如果您想实际输出属于课程的书名,而不仅仅是控制台或视图中的计数,您可以执行类似的操作:

        Lesson.all.each do |lesson|
          puts lesson.books.map { |b| b.name }.join(", ")
        end
        

        【讨论】:

          猜你喜欢
          • 2015-02-02
          • 2018-06-23
          • 1970-01-01
          • 2012-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-14
          • 1970-01-01
          相关资源
          最近更新 更多