반응형
MySQL Error 1111 - 창 함수를 중첩할 때 그룹 함수가 잘못 사용됨
에 대한 SQL 보고서를 작성 중answers
테이블:
id | created_at
1 | 2018-03-02 18:05:56
2 | 2018-04-02 18:05:56
3 | 2018-04-02 18:05:56
4 | 2018-05-02 18:05:56
5 | 2018-06-02 18:05:56
출력은 다음과 같습니다.
weeks_ago | record_count (# of rows per weekly cohort) | growth (%)
-4 | 21 | 22%
-3 | 22 | -12%
-2 | 32 | 2%
-1 | 2 | 20%
0 | 31 | 0%
현재 다음 항목에 오류가 있습니다.
1111 - Invalid use of group function
내가 여기서 뭘 잘못하고 있는 거지?
SELECT floor(datediff(f.created_at, curdate()) / 7) AS weeks_ago,
count(DISTINCT f.id) AS "New Records in Cohort",
100 * (count(*) - lag(count(*), 1) over (order by f.created_at)) / lag(count(*), 1) over (order by f.created_at) || '%' as growth
FROM answers f
WHERE f.completed_at IS NOT NULL
GROUP BY weeks_ago
HAVING count(*) > 1;
현재 행을 제외한 모든 행의 실행 카운트를 찾고 싶다고 생각합니다.내 생각에 넌 그 일을 버려도 될 것 같아LAG
다음과 같이 기능합니다.
SELECT
COUNT(*) OVER (ORDER BY f.created_at ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) x, -- running count before current row
COUNT(*) OVER (ORDER BY f.created_at) y -- running count including current row
당신은 원하는 만큼 나누고 곱할 수 있습니다.
아뇨, 그냥 헤어지기만 하면 돼요GROUP BY
그리고.LAG OVER
:
WITH cte AS (
SELECT
FLOOR(DATEDIFF(created_at, CURDATE()) / 7) AS weeks_ago,
COUNT(DISTINCT id) AS new_records
FROM answers
WHERE 1 = 1 -- todo: change this
GROUP BY weeks_ago
HAVING 1 = 1 -- todo: change this
)
SELECT
cte.*,
100 * (
new_records - LAG(new_records) OVER (ORDER BY weeks_ago)
) / LAG(new_records) OVER (ORDER BY weeks_ago) AS percent_increase
FROM cte
사용할 수 없습니다.lag
들어있다COUNT
집계 함수를 사용할 경우 집계 함수가 집계 함수를 포함할 수 없으므로 집계 함수는 집계 함수 포함 집계 함수를 사용할 때 사용할 수 없습니다.
서브쿼리를 사용하여 만들 수 있습니다.
SELECT weeks_ago,
NewRecords "New Records in Cohort",
100 * (cnt - lag(cnt, 1) over (order by created_at)) / lag(cnt, 1) over (order by created_at) || '%' as growth
FROM (
SELECT floor(datediff(f.created_at, curdate()) / 7) AS weeks_ago,
COUNT(*) over(partition by weeks_ago order by weeks_ago) cnt,
count(DISTINCT f.id) NewRecords,
f.created_at
FROM answers f
) t1
언급URL : https://stackoverflow.com/questions/52433949/mysql-error-1111-invalid-use-of-group-function-when-nesting-window-functions
반응형
'source' 카테고리의 다른 글
현재 디렉터리 및 파일 디렉터리 찾기 (0) | 2023.01.19 |
---|---|
Vue.js $scopedSlots가 Vue 인스턴스에서 작동하지 않음 (0) | 2023.01.19 |
Symfony2 번들에 상대적인 파일 접근 (0) | 2023.01.19 |
팬더 DataFrame의 컬럼을 여러 줄로 네스트(폭발)하는 방법 (0) | 2023.01.19 |
숫자에 st, nd, rd 및 th(일반) 접미사를 추가합니다. (0) | 2023.01.19 |