如何选择重复行并按两列分组

时间:2015-07-14 00:34:02

标签: laravel eloquent

我有下表:

ID|user_id|group_id|subject |book_id
 1| 2     |3       |history |1
 2| 4     |3       |history |1
 3| 5     |3       |art     |2
 4| 2     |3       |art     |2
 5| 1     |4       |sport   |5

我想列出组3(id)的所有行,这些行具有相同的subject_id和book_id的重复行。 subject和book_id是确定要重复的2行或更多行的原因。

我希望我的独特结果看起来像这样:

|subject |book_id|
|history |1      |
|art     |2      |

使用查询构建器或eloquent

1 个答案:

答案 0 :(得分:5)

获取所需结果的SQL查询可能看起来像

SELECT subject, book_id
  FROM table1
 WHERE group_id = 3
 GROUP BY subject, book_id
HAVING COUNT(*) > 1 

这是 SQLFiddle 演示

现在使用Laravel查询生成器

$duplicates = DB::table('table1')
    ->select('subject', 'book_id')
    ->where('group_id', 3)
    ->groupBy('subject', 'book_id')
    ->havingRaw('COUNT(*) > 1')
    ->get();