programing

Raw SQL / Larabel을 사용하여 누적 카운트를 수행하는 방법 - 웅변 ORM

goodsources 2022. 9. 13. 22:19
반응형

Raw SQL / Larabel을 사용하여 누적 카운트를 수행하는 방법 - 웅변 ORM

이것은 Larabel 질문이라기보다는 SQL 질문입니다.

저는 제 경험을 바탕으로 다음과 같은 것을 성취하고 싶습니다.User을 모델로 하다created_at필드(데이터베이스의 테이블 사용자)

작성필_at user_id
2022-04-30 1
2022-05-02 2
2022-05-03 4
날짜. created_users_to_this_date total_users_created_to_date
2022-04 1 1
2022-05 2 3

어떻게 하는지 아세요?

지금까지 실행한 작업(Untive ORM 사용):

User::query()
   ->selectRaw("COUNT(*) created_users_to_this_date, DATE_FORMAT(created_at, '%Y-%m') date")
   ->orderBy('date')
   ->groupBy('date')
   ->get();

동등한 SQL 요구

select COUNT(*) created_users_to_this_date, DATE_FORMAT(created_at, '%Y-%m') date from `users` where `users`.`deleted_at` is null group by `date` order by `date` asc

그래서 돌아온다

날짜. created_users_to_this_date
2022-04 1
2022-05 2

도와주셔서 감사합니다

mysql 버전 지원 창이 기능한다면SUM누적 카운트를 수행하는 창 함수

DB::table(DB::raw('(select COUNT(*) created_users_to_this_date, DATE_FORMAT(created_at, \'%Y-%m\') date 
    from `users` 
    where `users`.`deleted_at` is null 
    group by `date`) t1'))
->select('created_users_to_this_date','date',DB::raw('SUM(created_users_to_this_date) OVER(ORDER BY date) total_users_created_to_date'))
->get();

동등한 SQL은

SELECT DATE ,
  @running_number:=@running_number+created_users_to_this_date AS created_users_to_this_date
   FROM (SELECT 
  COUNT(*) AS created_users_to_this_date,
  DATE_FORMAT(created_at, '%Y-%m') DATE
FROM
  users 
where users.deleted_at is null 
GROUP BY `date` 
ORDER BY `date` ASC ) final
JOIN (SELECT @running_number:=0) rn
User::query()
 ->select('
 DB::raw('COUNT(DATE_FORMAT(created_at, \'%Y-%m\') = DATE_FORMAT(now(), \'%Y-%m\')) as created_users_to_this_date'),
 DB::raw('COUNT(DATE_FORMAT(created_at, \'%Y-%m\') <= DATE_FORMAT(now(), \'%Y-%m\')) as total_users_created_to_date'),
 DB::raw('DATE_FORMAT(created_at, '%Y-%m') as date')
 ')->orderBy('date')->groupBy('date')->get();

언급URL : https://stackoverflow.com/questions/72160478/how-to-do-a-cumulative-count-using-raw-sql-laravel-eloquent-orm

반응형