╔════╦═══════╦═══════╦═══════╗
║ id ║ Col A ║ Col B ║ Col C ║
╠════╬═══════╬═══════╬═══════╣
║ 1 ║ 36 ║ 50 ║ AAA ║
║ 2 ║ 36 ║ 50 ║ BBB ║
║ 3 ║ 36 ║ 44 ║ CCC ║
║ 4 ║ 36 ║ 44 ║ DDD ║
║ 5 ║ 56 ║ 33 ║ EEE ║
║ 6 ║ 56 ║ 78 ║ FFF ║
╚════╩═══════╩═══════╩═══════╝
laravel 쿼리 작성기를 사용하여 'Col B'에서 가장 높은 숫자와 동일한 값 'Col A'에서 테이블 행을 얻는 방법은 무엇입니까?
결국 다음과 같은 결과를 얻고 싶습니다.
╔════╦═══════╦═══════╦═══════╗
║ id ║ Col A ║ Col B ║ Col C ║
╠════╬═══════╬═══════╬═══════╣
║ 1 ║ 36 ║ 50 ║ AAA ║
║ 2 ║ 36 ║ 50 ║ BBB ║
║ 6 ║ 56 ║ 78 ║ FFF ║
╚════╩═══════╩═══════╩═══════╝
이 행을 얻는 이유는 'Col A'에 두 개의 숫자 36과 56이 있기 때문입니다. 'Col B'에서 가장 높은 숫자는 36의 경우 50이고 'Col B'의 가장 높은 숫자는 56의 경우 78입니다.
요구 사항을 충족하기위한 SQL 쿼리는 다음과 같습니다.
SELECT * FROM `test` WHERE col_b in (SELECT MAX(col_b) from test GROUP BY col_a);
고려 test
테이블 이름으로, col_a
그리고 col_b
골 A와 골 B로 각각.
아래는 위 쿼리의 Laravel 쿼리 빌더 버전입니다.
Test::select('*')
->whereIn('col_b', function($query)
{
$query->from('test')->select(DB::raw("MAX(col_b)"))->groupBy('col_a');
})->get();
그것이 당신을 위해 작동하기를 바랍니다. :)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다