반응형
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
반응형
'programing' 카테고리의 다른 글
PHP의 문자열 시작 부분에 .=를 추가할 수 있습니까? (0) | 2022.09.13 |
---|---|
문자열을 문자열의 처음 n자로 잘라내고 문자가 제거되면 점 3개를 추가합니다. (0) | 2022.09.13 |
계속하기 전에 JavaScript 절전/대기 (0) | 2022.09.13 |
javax.annotation에서 @Nullable을 찾을 수 없습니다.* (0) | 2022.09.13 |
MacOS 또는 OS X에 pip을 설치하는 방법 (0) | 2022.09.13 |