가장 많이 발생하는 값을 선택하는 방법을 찾고 있습니다. 각 스레드별로 가장 많이 게시 한 사람.MySQL에서 가장 많이 발생하는 값을 선택하십시오.
SELECT MOST_OCCURRING(user_id) FROM thread_posts GROUP BY thread_id
이렇게하는 좋은 방법이 있습니까?
가장 많이 발생하는 값을 선택하는 방법을 찾고 있습니다. 각 스레드별로 가장 많이 게시 한 사람.MySQL에서 가장 많이 발생하는 값을 선택하십시오.
SELECT MOST_OCCURRING(user_id) FROM thread_posts GROUP BY thread_id
이렇게하는 좋은 방법이 있습니까?
스레드 단위로 계산을 원한다면 중첩 된 쿼리를 사용할 수 있다고 생각합니다. 스레드별로 그룹화 한 다음 사용자별로 그룹화 :
SELECT thread_id AS tid,
(SELECT user_id FROM thread_posts
WHERE thread_id = tid
GROUP BY user_id
ORDER BY COUNT(*) DESC
LIMIT 0,1) AS topUser
FROM thread_posts
GROUP BY thread_id
+1, 귀하의 의견을 참조하십시오 – Unreason
"그룹당 가장 큰 n"태그 아래의 질문을 확인하는 경우 수많은 예제가 있습니다. 하지만이 경우에는 묶음을 처리 할 방법을 정의하지 않습니다. 두 명 이상의 사용자가 동일한 계수 값을 갖는 경우는 어떻게됩니까?
SELECT DISTINCT
tp.thread_id,
tp.user_id
FROM THREAD_POSTS tp
JOIN (SELECT t.thread_id,
t.user_id,
COUNT(t.user_id) AS occurrence,
CASE
WHEN @thread != t.thread_id THEN @rownum := 1
ELSE @rownum := @rownum + 1
END AS rank,
@thread := t.thread_id
FROM THREAD_POSTS t
JOIN (SELECT @rownum := 0, @thread := -1) r
GROUP BY t.thread_id, t.user_id
ORDER BY t.thread_id, occurrence DESC) x ON x.thread_id = tp.thread_id
AND x.user_id = tp.user_id
AND x.rank = 1
이 스레드
SELECT thread_id, user_id, COUNT(*) as postings
FROM thread_posts
GROUP BY thread_id, user_id
당 USER_ID의 발생을 표로 것입니다하지만 당신은 단지
SELECT thread_id, user_id, COUNT(*) as postings
FROM thread_posts
GROUP BY thread_id, user_id
HAVING postings = max(postings)
에 해당 각 스레드
SELECT thread_id, user_id, postings
FROM (
SELECT thread_id, user_id, COUNT(*) as postings
FROM thread_posts
GROUP BY thread_id, user_id
)
HAVING postings = max(postings)
의 최고 사용자를 선택하려면
HAVING 키 워드 d는 HAVING 절의 조건을 만족하는 집계 된 출력 행을 체리 선택하기 위해 집계 연산과 함께 사용됩니다.
HAVING 절은 WHERE 절과 다른데, HAVING 절은 쿼리의 결과 출력을 필터링합니다. 반면 WHERE 절은 쿼리의 입력 데이터를 필터링합니다. HAVING 절은 쿼리의 결과 출력을 필터링하므로 ORDER BY 및 GROUP BY 절 다음에 나타나야합니다.
작동하지 않습니다. 이 쿼리를 실행하면 빈 출력이 나타납니다. mysql에서 아무 것도 반환되지 않습니다. –
상관 상위 게시 사용자가있는 스레드 당 하나의 행 목록이 필요합니까? –
@Michael, 맞습니다. – Aistina