본문 바로가기
MySql

MySQL mysql은 그룹당 처음 n 개 행을 선택합니다.

by 베이스 공부 2020. 12. 21.
반응형


다음과 같은 테이블이 있습니다.

| table.id    | USER.id
----------------------------------------------
| 1           | 101
| 2           | 101
| 3           | 101
| 4           | 101 
| 5           | 101
| 6           | 101
| 7           | 101 
| 8           | 101
| 9           | 101 
| 10          | 101
| 11          | 102
| 12          | 102 
| 13          | 102
| 14          | 102
| 15          | 103 
| 16          | 103
| 17          | 103
| 18          | 103
| 19          | 103
| 20          | 103
| 21          | 103
| 22          | 103 
| 23          | 103
| 24          | 104
| 25          | 104 
| 26          | 104
| 27          | 104
| 28          | 104
| 29          | 104
| 30          | 105
| 31          | 105
| 32          | 105 
| 33          | 106
| 34          | 106

user.id로 그룹화 된 table.id의 수를 얻으려고하고 user.id의 수가 7보다 크면 결과를 7로 표시합니다 (카운트 결과를 7로 제한).

이 예에서 결과는 다음과 같아야합니다.

| USER.id         | count of table.ID
----------------------------------------
| 101             | 7
| 102             | 4
| 103             | 7
| 104             | 6
| 105             | 3
| 106             | 2

난 노력 했어:

SELECT USERid, COUNT(table.id)
FROM table
WHERE table.id IN (select top 7 table.id from table)
GROUP BY USERid

SELECT USERid, COUNT(table.id)
FROM table
WHERE (
    SELECT COUNT(table.ID) FROM table as t
    WHERE t.id = t.id AND t.USERid <= table.USERid
    ) <= 7
GROUP BY USERid

 

해결 방법

 


SELECT USERid, LEAST(7, COUNT(*))
FROM table
GROUP BY USERid

귀하의 의견에있는 질문에서

SELECT SUM(countByUser) 
FROM
 (SELECT LEAST(7, COUNT(*)) as countByUser
  FROM table
  GROUP BY USERid) c


 

참조 페이지 https://stackoverflow.com/questions/19168834

 

 

반응형

댓글