반응형
사용자가 일련의 동영상을 본 횟수를 기록하고 있습니다. 이제 매일 비디오를 시청하는 사용자 수의 그래프를 만들려고합니다.
UserVideoWatching.where("created_at >= ? AND user_id != ?",1.month.ago, User.elephant.id).group("DATE(created_at)").reorder('created_at').count
SQL 생성
SELECT COUNT(*) AS count_all, DATE(created_at) AS date_created_at FROM `user_video_watchings` WHERE (created_at >= '2013-01-27 10:43:24' AND user_id != 7) GROUP BY DATE(created_at) ORDER BY created_at
매일 시청하는 모든 비디오에 대해 올바른 결과를 생성하지만, 제가 말했듯이 각 사용자에게 한 번만 표시하고 싶습니다.
내가 원하는 SQL은
SELECT COUNT(DISTINCT user_id) AS count_all, DATE(created_at) AS date_created FROM `user_video_watchings` WHERE (created_at >= '2013-01-27 10:33:18' AND user_id != 7) GROUP BY DATE(created_at) ORDER BY created_at
그래서 나는 생각했다
UserVideoWatching.where("created_at >= ? AND user_id != ?",1.month.ago, User.elephant.id).group("DATE(created_at)").reorder('created_at').select('COUNT(DISTINCT user_id) AS count_all, DATE(created_at) AS date_created')
내가 원하는 것을 할 것입니다. 그러나 이것은
[#<UserVideoWatching >, #<UserVideoWatching >]
해시보다는.
어떤 아이디어?
레일 3.1과 mysql을 사용하고 있습니다.
해결 방법
distinct.count (: attribute_name)
를 사용할 수 있습니다.
(Rails 3에서는 대신 count (: user_id, distinct : true)
사용)
그러므로:
UserVideoWatching.where("created_at >= ? AND user_id != ?", 1.month.ago, User.elephant.id)
.group("DATE(created_at)").reorder('created_at').distinct.count(:user_id)
테스트 할 수는 없지만 그게 원하는 SQL을 생성 할 것이라고 생각합니다.
참조 페이지 https://stackoverflow.com/questions/15110166
반응형
'MySql' 카테고리의 다른 글
MySQL Codeigniter 메시지 : 정의되지 않은 변수 : 쿼리 (0) | 2021.01.10 |
---|---|
MySQL 한 페이지 PHP에 여러 mysql 연결 (0) | 2021.01.10 |
MySQL의 두 테이블에서 데이터 선택 (0) | 2021.01.10 |
MySQL virtualenv, mysql-python, pip : 누구든지 방법을 알고 있습니까? (0) | 2021.01.10 |
MySQL SQL을 사용하여 날짜별로 정렬 할 수 있지만 결과 집합 뒤에 null 날짜를 넣을 수 있습니까? (0) | 2021.01.10 |
댓글