mySQL SELECT문 질문... (빈도 정렬)

futari의 이미지

안녕하세요.

mySQL을 사용해서 작업을 하고 있는데요.

DB를 제대로 배워본 적도 없고 해서

삽질은 하면서 시도는 하는데 될듯 될듯 하면서 계속 막히네요 ㅜ.ㅜ

DB 고수님들의 도움을 부탁합니다.

지금 제가 하려고 하는게

"빈도"를 order 조건에 포함시키는 건데요.

group by에 count()를 써서 하는 방식은

같은것을 group by 하면서 1개로 만들어 버리는데,

저는 그걸 1개로 만들지 말고 원래대로 다 보여줬으면 하거든요.

예를들어.. 테이블에서 이름이 많은 순서대로 출력한다면

------------------------
이름 | 성 | 이름수
------------------------
동수 | 박 | 4
동수 | 김 | 4
동수 | 최 | 4
동수 | 이 | 4
성수 | 김 | 3
성수 | 최 | 3
성수 | 이 | 3
민수 | 김 | 2
민수 | 이 | 2
지수 | 하 | 1
인수 | 최 | 1
길수 | 김 | 1
--------------------

이런식으로 나오길 원하는데요.

잘만 하면 쉽게 될듯 한데도 잘 안되네요 ㅜ.ㅜ

heap table을 이용해서 3개의 쿼리로 수행하는건 됩니다만
(create -> select -> drop)

쿼리 한문장으로 select하는게 필요하거든요.

혹시 아시는 분 좀 알려주세요~~ =ㅂ=

감사합니다.

cedar의 이미지

일종의 비정규화 방법인데요,
저 같으면 테이블에 빈도 필드를 만들고,
INSERT, UPDATE, DELETE할 때마다 빈도를 UPDATE하는 트리거를 만드는 방법을 씁니다. 그럼 SELECT할 때는 원(1) 쿼리로 되지요.

SELECT 속도가 중요한 경우에는 상당한 속도 향상을 얻을 수 있죠.

nachnine의 이미지

이름 성
=============
동수 김
동수 이

1)
이름수로 group by 한거랑 원래 테이블을 조인하면 되겠네요
아마 self join 이라고 하죠 ㅋㅋ

select A.이름, A.성 , B.CNT from 테이블명 A ,
( select count(*) CNT , 이름 from 테이블명 group by 이름 ) B
where A.이름 = B.이름

+ ORDER BY

2)
select A.이름, A.성 , ( select count(*) from 테이블명 B where B.이름 = A.이름 ) CNT from 테이블명 A
요건 sub query 라고 합니당

+ ORDER BY

p.s.
테이블이 충분히 analyze 되어 있고, index가 잘만들어진 상태에서
튜닝된 SQL을 실행하는 것으로 도저히 안되는 경우가 아니라면..
임시테이블과 트리거를 만들어야할 필요가 없죠.

futari님 혹시 PO...CH 아닌가요

더자세한 질문은 DSN 으로

futari의 이미지

답변 주신분들 우선 정말 감사합니다.

저도 질문 올리기전에 할만한 짓은 꽤 해봤는데요 ;;

구석에 디비 책도 뒤져보고 (근데 별로 책이 안좋은거 같아요 -_-;; )

디비사랑넷도 가서 뒤져보고.

잘 모르는 조인짓도 해가면서 이리저리 해보는데

참; 잘 안되더라구요.

서브쿼리가 되면 간단할텐데 써야하는게 mySQL 4.0이라서 ;;;

조인을 하면 된다고 써주셨는데, 거기 표현해주신 쿼리식이 조인 식인가요?

역시 sub query를 하는 것 같아서 쓸수가 없는데...

어떻게 방법은 없는걸까요 ㅜ.ㅜ

사용하는 mySQL 버전은 4.0.1x~20 입니다.

아.. 그리고 트리거도 mySQL은 안된다고 본것 같은데 ;

누가 저에게 길을 좀 ㅜ.ㅜ;

아 .. 진짜 급한데 ㅜ.ㅜ 담주 휴간데 ㅜ.ㅜ

ps. 그리고 P모.. 는 맞습니다만 ^^;;
(무슨 죄진것 있나해서 찔리기부터 ㅎㅎ)

그리고 DSN은 뭔가요??

ps2. 방금 left outer join으로 대충 처리한줄 알았으나 ... 역시 안됨 ㅜ.ㅜ

-------------------------
The universe is run by the complex interweaving of three elements: matter, energy, and enlightened self-interest.
- G'kar, Babylon 5

cedar의 이미지

MySQL 버전이 낮아서 트리거와 서브쿼리가 안되는 모양이네요.
그러면 트리거가 하는 짓을 애플리케이션에서 수동으로 실행시켜주는 수 밖에요.

그리고 DSN은 http://database.sarang.net/ 을 말합니다.

futari의 이미지

드디어 -_- 처리했습니다.

left outer join 쓰다가 도저히 안돼서 삽질중에

DSN보다가 아이디어가 떠올라서

SELECT a.*, sum(if(a.이름=b.이름,1,0)) as frequency
FROM 몰라몰라_tbl a, 몰라몰라_tbl b
Group by idx
ORDER BY frequency desc ;

뭐 이런 비슷한 식으로 해결했습니다 -_-;;

헐헐..

다시한번 감사드립니다.

-------------------------
The universe is run by the complex interweaving of three elements: matter, energy, and enlightened self-interest.
- G'kar, Babylon 5

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.