. 0 18 785

by chap17 [SQL Query] [2017.06.12 09:25:12]


..............

by 마농 [2017.06.12 10:38:39]

댓글이 많이 달린의 기준이
  - 메인글에 달린 댓글수(댓글의 댓글 포함) 기준인가요?
  - 각 게시글(메인 및 댓글)의 댓글수(댓글의 댓글 미포함) 기준인가요?
댓글이 가장 많이 달린 글이 공동 1등인 경우
  - 두개 다 나와야 하나요?


by 마농 [2017.06.13 07:38:09]
SELECT b.*
  FROM (SELECT COUNT(*) - 1 cnt
          FROM test_bbs
         GROUP BY group_id
         ORDER BY cnt DESC
         LIMIT 1
        ) a
 INNER JOIN
       (SELECT group_id
             , COUNT(*) - 1 cnt
             , MIN(article_id) article_id
          FROM test_bbs
         GROUP BY group_id
        ) b
    ON a.cnt = b.cnt
;

 


by 마농 [2017.06.13 23:49:15]

메인글과 그에 대한 댓글이 group_id 로 묶여 있다고 생각했구요
메인글이 당연히 댓글보다 article_id 가 작을거라고 생각했습니다.
제 추측이 틀린건가요?
잘못 나오게 되는 자료를 예시자료로 만들어 주세요.


by 마농 [2017.06.14 00:16:12]

제 추측이 틀린건가요? 데이터가 이상하네요.
group_id 1 번에 대해 동일한 sequence_no 0000000001999999 가 4개나 있네요?
4개 다 메인글인가요?
댓글로 추정되는 sequence_no 가 5개가 있는데?
어떤 근거로 연결하나요? sequence_no 로 댓글관계 확인이 가능한가요?
article_id | group_id | sequence_no      | posting_date        | read_count | writer_name | password | title  | content |
-----------+----------+------------------+---------------------+------------+-------------+----------+--------+---------+
         1 |        1 | 0000000001999999 | 2017-06-08 00:05:00 |         19 | a           | a        | a      | a       |
         2 |        1 | 0000000001999999 | 2017-06-08 00:05:08 |          3 | b           | b        | b23    | b23     |
         3 |        1 | 0000000001999999 | 2017-06-08 00:05:16 |          2 | c           | c        | c      | c       |
         4 |        1 | 0000000001999999 | 2017-06-08 00:05:27 |          5 | d           | d        | d      | d       |
        43 |        1 | 0000000001989999 | 2017-06-08 03:28:58 |          0 | a           | a        | re:    | a       |
        44 |        1 | 0000000001979999 | 2017-06-08 03:30:32 |          0 | a           | 1        | re:    | a       |
        50 |        1 | 0000000001969999 | 2017-06-08 03:39:30 |          2 | g           | g        | re:    | g       |
        54 |        1 | 0000000001969899 | 2017-06-08 03:41:43 |          0 | d           | d        | re:    | d       |
        68 |        1 | 0000000001959999 | 2017-06-11 02:22:42 |          0 | 55          | 55       | re:    | 55      |
-----------+----------+------------------+---------------------+------------+-------------+----------+--------+---------+       

 


by 마농 [2017.06.14 00:27:27]

헐... ㅠ,.ㅠ

Group By 에 bid 를 추가하세요.


by 마농 [2017.06.14 00:42:20]
SELECT b.*
  FROM (SELECT COUNT(*) - 1 cnt
          FROM test_bbs
         GROUP BY bid, group_id            -- 요기
         ORDER BY cnt DESC
         LIMIT 1
        ) a
 INNER JOIN
       (SELECT bid                         -- 요기
             , group_id
             , COUNT(*) - 1 cnt
             , MIN(article_id) article_id
          FROM test_bbs
         GROUP BY bid, group_id            -- 요기
        ) b
    ON a.cnt = b.cnt
;

 


by 마농 [2017.06.14 00:39:48]

음...
"댓글이 가장 많은 글번호" 에 대한 명확한 정의에 대한 질문을 드렸었는데...
거꾸로 대답해 주신 듯 하네요?
서로 거꾸로 생각하고 있는 듯 하네요...
의사소통이 어렵네요.

 

댓글이 많이 달린의 기준이
  - 1. 메인글에 달린 댓글수(댓글의 댓글 포함) 기준인가요?
  - 2. 각 게시글(메인 및 댓글)의 댓글수(댓글의 댓글 미포함) 기준인가요?
1번을 선택해 주셨는데... 원하시는 건 2번 인듯 하네요?


by 마농 [2017.06.14 00:49:29]

그럼 맞는 듯 요.
맞나???
쉽게라고 쓰셨으나. 상당히 어렵네요.


by 마농 [2017.06.14 01:01:08]

왠 또 동문서답이신지?
쿼리 다 만들어 드렸는데요???


by 마농 [2017.06.14 01:16:03]

(5, 13, 6) 의 댓글 6개
(1, 63, 9) 의 댓글 4개


+-----+------------+----------+------------------+---------------------+------------+-------------+----------+--------+---------+
| bid | article_id | group_id | sequence_no      | posting_date        | read_count | writer_name | password | title  | content |
+-----+------------+----------+------------------+---------------------+------------+-------------+----------+--------+---------+
|   5 |         13 |        6 | 0000000006999999 | 2017-06-08 00:57:15 |          5 | gg          | gg       | gg     | gg      |
|   5 |         45 |        6 | 0000000006989999 | 2017-06-08 03:30:47 |          0 | d           | d        | re:    | d       |
|   5 |         46 |        6 | 0000000006979999 | 2017-06-08 03:31:30 |          4 | asdasd      | a        | re:    | a       |
|   5 |         79 |        6 | 0000000006979899 | 2017-06-11 17:30:18 |          5 | yy          | yy       | yy3    | yy3     |
|   5 |         80 |        6 | 0000000006979898 | 2017-06-11 17:30:25 |          2 | gf          | gf       | gf     | gf      |
|   5 |         81 |        6 | 0000000006979897 | 2017-06-11 20:07:35 |          0 | jj          | jj       | re: jj | jj      |
|   5 |         82 |        6 | 0000000006979799 | 2017-06-11 20:07:48 |          0 | vv          | vv       | re: vv | vv      |
+-----+------------+----------+------------------+---------------------+------------+-------------+----------+--------+---------+
| bid | article_id | group_id | sequence_no      | posting_date        | read_count | writer_name | password | title  | content |
+-----+------------+----------+------------------+---------------------+------------+-------------+----------+--------+---------+
|   1 |         63 |        9 | 0000000009999999 | 2017-06-09 22:59:58 |          4 | tt          | tt       | tt     | tt      |
|   1 |         66 |        9 | 0000000009989999 | 2017-06-10 14:27:51 |          2 | yy          | yy       | yy     | yy      |
|   1 |         85 |        9 | 0000000009989899 | 2017-06-11 21:46:50 |          1 | ii          | ii       | re:    | ii      |
|   1 |        111 |        9 | 0000000009979999 | 2017-06-14 00:58:39 |          0 | zx          | zx       | re: zx | zx      |
|   1 |        112 |        9 | 0000000009969999 | 2017-06-14 00:58:56 |          0 | ui          | ui       | re: ui | ui      |
+-----+------------+----------+------------------+---------------------+------------+-------------+----------+--------+---------+


by 마농 [2017.06.14 01:38:14]

데이터만 봤을 때 때 93번 글은 bid 가 1 이고, group_id 가 5입니다.
sequence_no 는 0000000005989999 이구요
sequence_no 는 0000000005999999 인 92번 글의 댓글로 추정됩니다.
group_id 도 9 로 다르고, sequence_no 도 다른 63 의 댓글이라는 근거가 부족합니다.


by 마농 [2017.06.14 01:51:26]

결론은
그룹번호로 묶이는게 맞다는 것이고
제 판단이나 쿼리에 문제가 없다는 것입니다.
93번글의 부모는 92번입니다. 63번이 아닙니다.


다만 댓글수 판정 기준에 대한 정의만 정확하게 하면 됩니다.


by 마농 [2017.06.14 01:47:51]

그리고 최종 13번 글의 댓글수는 몇개라고 생각하시나요?           
 - 1. 댓글만 : 2개                                         
 - 2. 댓글에 댓글까지 : 6개                                
설마 1번(2개) 이라면 계속 거꾸로 대화하고 있었던 것입니다. ㅠ,.ㅠ

 


by 마농 [2017.06.14 02:07:52]

판정기준이 댓글만 이군요?
첫 질문에 (댓글의 댓글 포함)을 선택해 주셔서 그런줄로만 알았는데.
새로운 기준에 대한 쿼리는 내일 다시 작성해 볼께요.
대신 선택 질문 하나 더 들어갑니다.
가장 많은 댓글수 판정기준이...
1. 메인글에 대해서만 댓글수를 확인할 것인지?
2. 댓글에 대해서도 댓글수를 확인할 것인지?


by 마농 [2017.06.14 02:02:57]

다시 보니..93 번글의 부모가 없네요.
92번글은 bid 가 다르네요.
93번 댓글의 부모가 없어서 마치 이전 메인글인 63 의 댓글인것처럼 보이는 것입니다.
93번 글의 부모가 삭제된 듯 하네요.


by 마농 [2017.06.14 02:11:08]

자꾸 안되는 건가요? 라고 하지 마세요.
다 됩니다.
다만 기준을 명확하게 제시해 주셔야 합니다.
기준이 명확하지 않고 왔다갔다 하면 어렵습니다.
쿼리는 어려운게 없습니다. 의사소통이 어려울 뿐입니다.


by 마농 [2017.06.14 09:53:48]
SELECT b.*
  FROM (SELECT COUNT(*) - 1 cnt
          FROM board a
         INNER JOIN board b
            ON b.bid      = a.bid
           AND b.group_id = a.group_id
           AND b.sequence_no LIKE CONCAT
               ( SUBSTR(a.sequence_no,  1,  INSTR(SUBSTR(a.sequence_no, 11, 6), '99') + 9)
               , '__'
               , SUBSTR(a.sequence_no, 12 + INSTR(SUBSTR(a.sequence_no, 11, 6), '99')
                                     ,  5 - INSTR(SUBSTR(a.sequence_no, 11, 6), '99') )
               )
         GROUP BY a.bid, a.group_id, a.article_id, a.sequence_no
         ORDER BY cnt DESC
         LIMIT 1
        ) a
 INNER JOIN
       (SELECT a.bid, a.group_id, a.article_id, a.sequence_no
             , COUNT(*) - 1 cnt
          FROM board a
         INNER JOIN board b
            ON b.bid      = a.bid
           AND b.group_id = a.group_id
           AND b.sequence_no LIKE CONCAT
               ( SUBSTR(a.sequence_no,  1,  INSTR(SUBSTR(a.sequence_no, 11, 6), '99') + 9)
               , '__'
               , SUBSTR(a.sequence_no, 12 + INSTR(SUBSTR(a.sequence_no, 11, 6), '99')
                                     ,  5 - INSTR(SUBSTR(a.sequence_no, 11, 6), '99') )
               )
         GROUP BY a.bid, a.group_id, a.article_id, a.sequence_no
        ) b
    ON a.cnt = b.cnt
;

 


by 마농 [2017.06.14 16:59:39]

조인 키가 없기 때문에 조인키를 억지로 만들어 내느라 복잡해 지는 것입니다.
부모의 article_id 를 테이블에 추가 관리해 준다면?
좀더 간단하게 조인이 되겠지요.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입