[SQL] 비개발자도 스티밋 통계를 뽑을 때까지 - 6편 - 검색을 잘하는 것도 실력이다!

in #database6 years ago (edited)

실력이 일천한 제가 아는 내에서 SQL 강좌를 한편씩 올리려고 합니다. 비 IT인들도 따라할수 있는 수준으로 진행하려고 노력할 예정이며 최종 목표는 따라하시는 분이 steemsql을 통해 여러가지 통계를 뽑는 수준이 되는 것입니다.

개인적으로 미숙한 강좌를 작성함에도 따라와주시는 분들이 생겨 굉장히 기쁩니다. 요새 좀 바쁘기도 해서 강좌편을 쓰기 힘들어 이제야 작성하게 되었습니다. 조회를 위한 기본적인 이야기들은 대충 마친 것 같고 응용력을 키울 단계라고 생각되어집니다. 검색편을 시작하기 전에 생각의 전환에 대해 간단하게 잡설하고 시작하겠습니다.^^

[생각 전환의 힘!]


콜롬버스의 달걀
너무도 유명한 일화인 콜롬버스의 달걀 이야기는 이제 이야기를 할 필요조차 없지만 오랜만에 리마인드 차원에서 다시 한번 봐볼까요?


신대륙을 발견하고 돌아온 콜롬버스를 시기한 나머지 사람들은 ‘누구나 할 수 있는 일이다’라고 비아냥거렸다. 그러자 콜럼버스는 사람들에게 달걀을 세워보라고 했다. 다들 낑낑거리며 세워보려고 했지만 아무도 성공할 수 없었다. 보다 못한 콜럼버스가 달걀의 한쪽 끝을 조금 깨뜨려서 세웠고, ‘신대륙의 발견도 이와 같다’고 해서 주의 사람들을 침묵시켰다


누구나 할수 있지만 아무도 시도하지 않았고 생각하지 못했다는 게 중요한 것 같습니다.

바퀴의 발명
그렇다면 인류사에 가장 중요했던 것중에 하나로 평가받는 바퀴의 발명은 어떠한가요? 위키에 따르면 바퀴의 발명은 문자, 농경, 인쇄술, 컴퓨터 정도가 동급이라고 합니다. 놀랍죠? 동그란 바퀴 하나가 컴퓨터나 문자 발명과 맞먹는다니...

인류 문명 발전의 원동력이 되었던 바퀴, 이제는 너무나 당연하게 사용하고 있지만 최초 바퀴의 발명이 없었다면 지금의 인류 문명은 이루지 못했겠죠. 이거 너무 거창한 사례들을 이야기해서 우리랑 아무 상관이 없다고 생각하실 수 있지만 우리가 하는 소소한 일들도 작은 생각의 전환으로 얼마든지 개선되고 발전될 수 있다는 이야기를 하고 싶습니다. 제가 이렇게 생각을 하고 싶다는 자기 암시일지도 모르겠습니다.ㅎㅎ

SQL 강좌에서 왜 이런 이야길 하는거죠?
왜냐하면 비단 SQL뿐만 아니라 모든 일에서도 이 발상의 전환이 주는 파괴력이 크기 때문이겠죠. 어제 corn113님이 증인들의 스팀파워 변화량에 대해서 궁금하시다는 글을 보고 저는 '아 이거 퇴근해서 steemsql로 뽑아야겠다'라고 생각했습니다. 헌데 @jungs님이 10분 있다가 올리신다고 하니 궁금해서 기다렸는데 왠걸 steemwhale.com으로 10분만에 수작업(노가다)으로 정리하신거였습니다.

15명의 한 사이클만 뽑았기에 10분만에 가능했겠지만 아마 SQL을 활용해서 그 데이터를 뽑기 위해서는 엄청난 수고로움을 들여야만 했을겁니다. 실제로도 확인해보니 보유스파량에 대한 계정 스냅샷이 없어서 입출금내역과 보상 리워드, 파워업 이력 등을 참조해야 해서 쉽지 않아보입니다.

항상 '프로그램이나 SQL로만 해결해야돼!' 라는 생각에 갇힌건 저였고 @jungs님은 '15명이면 잠깐 손으로 만들지 뭐'라는 생각으로 10분만에 뽑아내신거죠. 예가 적절한지는 모르겠지만 저는 그렇게 생각합니다. 그래서 IT에서도 다른 전공이신 분들의 생각으로 도움이 많이 되는 경우도 많습니다. 저를 비롯한 개발자분들은 키보드와 마우스로만 해결하려는 습성이 있기때문이죠. (ㅎㅎ 저만 그럴지도 모릅니다.)

SQL로 자료를 뽑을 때에도 가공하기 힘든 자료는 1차적으로 뽑아서 엑셀의 기능을 활용해서 가공한다던지, 수기로 가공해도 아무런 문제가 없다는 이야기입니다. 오버엔지니어링과도 연관이 있는 이야기이지만 이건 나중에 이 주제로 따로 포스팅을 하면 될것 같습니다. 또 사고의 전환으로 데이터 추출 시간이 몇시간에서 몇초로 바뀌는 경우도 있구요. 저 역시 스스로의 틀 안에 갇혀있다가 많이 배운 사례가 많아 이런 이야기를 쓰는 것 같습니다.

그럼 정말로 길었던 오늘의 잡설을 마치고 응용편을 시작하겠습니다. (세계님이 명성이 60이 넘어가면 최고로 말이 많아진다더니... 정말로 그런것 같습니다. '투머치토커'의 피가 제게도 흐르는건지...? 60이 넘어가면 말이 많아지게하는 각성효과가 있는건지...?)

[검색을 잘하는 것도 실력이다!]

구글 신님께선 알고 계신데~♬🎅

캐롤송 '울면 안돼'의 가사처럼 구글신님께선 우리가 고민할만한 왠만한건 다 알고 계십니다. 그분께 질문을 하다보면 검색하는 실력도 늘고 결과를 판단하는 실력도 늡니다. 개발자가 아니더라도 정보의 바다에 살고 있는 우리가 갖추어야 하는 소양 중 하나가 아닐까 생각합니다.

개발자라고 해서 수많은 문법과 디비, 프로그램들의 사용법을 숙지하고 살 수 없기에 알았던 것도 수개월만 지나면 잊어버리는게 인지상정인 저의 머리이기에. 단지 어떻게 검색하면 원하는 결과를 얻을 수 있는지 그 결과를 내 프로젝트에 어떻게 하면 적절히 적용할 수 있는지 판단과 적용하는 실력을 키우는 것이 관건입니다.

물론 이 실력은 기초가 튼튼할 때 가장 빛을 발합니다. ^^ 그래서 많이 쳐보라는 것입니다. (써놓고 보니 정말 어감이 이상합니다. 키보드로 많이 쳐봐야합니다. ㅎㅎㅎ )

그래서 어찌 본다면 우리 어릴때 백과사전처럼 사용하게 되는게 구글입니다. 적절한 키워드를 영문으로 조합해서 넣어주면 이미 수없이 질문했던 글들과 적절한 답들이 검색이 됩니다.

어릴때 요거만 있으면 무서울게 없었다능...

예를 들어 mssql을 사용하는 steemsql에서의 해결 방법을 찾을 때에는 항상 'mssql'을 조합하셔야 다른 DB 사용법이 덜 검색 되겠죠. 만약 문자열 자르는 방법을 검색하신다면. 'mssql 문자열 자르기' 정도가 되겠습니다.

하지만 한국어로 검색했을 때의 결과가 실망스러울 수 있거나 안나올때는 영문으로 검색을 합니다. 'mssql string split' 정도가 되겠습니다.

단지 한국어에서 영어로만 변경했을 뿐인데 검색 결과가 달라지죠?

아예 개발자에게 없어서 안되는 소중한 사이트인 stackoverflow를 추가하면 많인 이들이 정답에 투표를 해주기에 그 결과를 더 신뢰할만한 정보를 찾을 수 있습니다.

이 경우 'stackoverflow mssql string split'로 검색하면 되겠네요.

세번째 검색결과를 선택해서 보면 이런식으로 질문을 등록하고~

많은 사람들이 질문에 대한 답을 등록하는데 그 결과를 우리 스티밋처럼 투표를 해서 가장 많은 것을 상단에 보여줍니다. 15표를 받은게 위에 있고 다운보트를 받은게 -1표로 밑에 있죠 ㅎㅎㅎ

(우리 스티밋도 이런 시스템이 있으면 참 좋겠죠? ㅎㅎ)

이런식으로 끝없이 검색을 하여 필요하고 원하는 지식을 찾아서 습득하여 문제를 해결해 나가는 것이죠. SQL뿐만 아니라 프로그램 언어도 동일합니다. ^^

원하는 정보를 책에서 찾는것이 아니라 수많은 실전 코드와 검색을 통한 다양한 해결방법들을 접하며 머리에 차곡차곡 쌓아놓는 것도 좋습니다. 저는 책을 개념탑재용이라면 실전코드와 다양한 해결방법은 변칙과 응용기술을 익히는 것이라 생각하기 때문이죠.

이미 책을 안보고 검색만으로 새로운 지식을 익히기에 전혀 어려움이 없는 세상입니다~^^ 물론 책을 넘기는 아날로그적인 감성도 좋아합니다. 종이가 주는 안정감도 좋구요. 눈과 마음도 편안해지죠.

왜 sql 강좌에서 sql은 하나도 말 안하고 이런 검색과 같은 말들만 하는지는 보시는 분들께서 더 잘 이해해주시리라 생각하며 '검색을 잘하는 것도 실력이다!' 편을 마칩니다.


[4편 숙제에 대한 피드백]


4편에서 숙제를 내보았는데 3분이나 해주셔서 참으로 뿌듯합니다. 4편의 글의 보상은 21.78입니다. * 0.375 하니 8.16정도가 나왔고 세분이 해주셨으니 2.7SBD이므로 반올림하여 3SBD + (제맘대로 1SBD) 하여 4SBD씩 보내드리도록 하겠습니다. (커피 한잔씩은 드실수 있어야 한다고 생각하기에... )

@siapa0516님, @myhappycircle님, @forhappywomen님! 감사드립니다.

세분 다 다른 문장의 정답을 올려주셨고 어떤것이 더 좋은 것이냐를 따질 필요는 없습니다. 물론 심도 있게 들어간다면 어떤 문장이 더 간결하며 가독성 있게 작성했는가와 퍼포먼스 측면으로 어떤 것이 더 좋은가를 따져야겠지만 그정도를 따져야 하는 문장은 아니기에 마치도록 하겠습니다. 세분 다시 한번 감사드립니다.^^


지난 회차 살펴보기


Sort:  

Cheer Up! 댓글이 많은걸 보고 궁금해서 왔습니다!

  • from Clean STEEM activity supporter

크~~~ 이런 꿀 팁을~ 좋은 내용 진심으로 감사합니다.
검색을 다시 잘 해야 겠네요 ㅋㅋ
아... 그리고 숙제편 금액은 받을 수가 없습니다. 정말 좋은 내용을 올려 주셔서 제가 오히려 더 드려도 부족한데 주시다니요. 말이 안됩니다.
진심 감사합니다. tip! 4.0

ㅎㅎㅎ 전 그냥 감사합니다 하고 받았습니다 ㅋㅋ

^_____________^ 잘 하셨어요. :) 해피님은 너무 열심히 하셔서 받으셔도 되지 않을까요? ㅎㅎㅎ

ㅜnhj12311님 대단해요!! 나중에 꼭 1편부터 정독해야 겠습니다...

그래요 언젠가 디비에 관심이 생기실때 이런게 있었지? 하며 봐주시면 좋을것 같아요 ㅎㅎ 감사합니다.

잘 읽었습니다.

이런 좋은 시리즈 포스팅이 있었네요 +_+

시간 날 때 꼭 읽어보겠습니다.
이번 주말에 짬내서 읽어보고 여러가지로 통계도 뽑아봐야 겠네용 ㅎㅎ

옷... 감사합니다. +_+/

검색의 중요성은 정말 공감합니다!

헛 프로필이 저와 잘통하시는군요? ㅎㅎ 감사합니다 ㅋㅋ

와~ 공부도 시켜주시고 강의료를 받지도 않으시고 오히려 돌려주시다니!!
감사합니다^^

5편에대한 숙제는 쉽지가 않네요 흑흑
join하다보니 컴퓨터가 버벅되기도 하고..

구체적으로 막히는부분에 대한 질문을 주시면 답이나 힌트를 드리겠습니다 ^^

Select
C.author
,sum(CASE WHEN T.[TO]= C.AUTHOR AND T.AMOUNT_SYMBOL= 'SBD' THEN T.AMOUNT END) AS SBD입금
,sum(CASE WHEN T.[FROM]= C.AUTHOR AND T.AMOUNT_SYMBOL= 'SBD' THEN T.AMOUNT END) AS SBD출금
,sum(CASE WHEN T.[TO]= C.AUTHOR AND T.AMOUNT_SYMBOL= 'STEEM' THEN T.AMOUNT END) AS STEEM입금
,sum(CASE WHEN T.[FROM]= C.AUTHOR AND T.AMOUNT_SYMBOL= 'STEEM' THEN T.AMOUNT END) AS STEEM출금
from [dbo].[TxTransfers] as T (nolock)
INNER JOIN Comments AS C (NOLOCK) ON (T.[FROM]= C.AUTHOR OR T.[TO]=C.AUTHOR)
 Where
 [type] = 'TRANSFER ' -- POWER UP한 사람은 제외
    and CHARINDEX('KO', BODY_LANGUAGE)>0 -- 한국어로 쓰인 포스팅
    AND C.PARENT_AUTHOR ='' --댓글 제외
    AND TITLE <>''
    and c.created >= '2017-10-01' --10월 1일 이후 작성된 글
 GROUP BY C.Author

이 답이라 생각하는데...
`Could not allocate space for object 'dbo.SORT temporary run storage: 140854566846464' in database 'tempdb' because the 'PRIMARY' filegroup is full. Create disk space by deleting unneeded files, dropping objects in the filegroup, adding additional files to the filegroup, or setting autogrowth on for existing files in the filegroup.
'

로 나옵니다. 고진선처 부탁드립니다.

헙... ^^ 잠시만용

잠은 언제 주무시는지.. 혹시 로봇입니까??

짐 아기 분유미기고잇어요ㅎㅅ

헐... 회사일에... 술에.. 밤샘 스팀잇에 육아까지..... 존... 존경합니다.

대단하십니다!!

들켯네요 ㅎㅎ

11시 취침 4시쯤 기상햇네욬ㅋㅋㅋ

Loading...

감사합니다!
SQL 정말 즐겁게 공부하고 있습니다 ㅎㅎ
진짜 구글신님은 모르시는게 없습니다.
저는 구글신님을 찬양하기로 했습니다ㅎㅎ

쿼리문법의 열거를 이제는 하려고 하면 정말 검색하면 다나오고 더이상 어떤 개념을 익혀야하는지 잘 몰라 구글신님을 찬양하는 포스팅을 해봤습니다 ㅋㅋㅋ

좋게 봐주셔서 저도 정말로 보람차고 즐겁습니다. 보상을 떠나 즐겁고 애정을 쏟게 만듭니다요 ㅎㅎ

구글신은 모르시는게 없지만...
제가 기도를 잘드려야되서 ㅠ_ㅠ

개념에 대해서 짧게 짧게 설명해주셔도 .... 따라가는 입장에서는 좋을 것 같습니다.

아기를 키우시고 저도 아기를 키우는 상태다 보니 아기에 비유하면,
전 이제 막 출산한 아이같습니다.
엄마 젖을 빨 수는 있지만 아직은 못찾아가는 상태인것 같습니다.
조금만 더 도움을 주십시오!!!

공부는 떠먹여주는 게 아니라 스스로 떠먹는거야!라고 말씀하실수도 있겠지만, 아직 숟가락 잡는 방법 조차도 모르는 신생아라 가엽게 여기어 주시옵소서 ㅎㅎ

오늘처럼 숙제 뿐만이 아니라 암거나 질문주셔도 됩니다! ㅎㅎ

j o in 을 이용하여. 명성도 60이 넘는 한국분들의 거래소를 추출해봐야겠습니다... 또 오래걸릴것 같습니다 ㅎㅎ

좋은 시도입니다~^^

명성도 60을 엮으니, 컴퓨터가 못해내는 것 같습니다 ㅎㅎ
그냥 간단하게 한국분들이 가장 많이 이용하는 거래소 3개를 추출해보았습니다.

하나 질문이 있어서 또 찾아왔습니다.

  • 스팀파워가 어느정도 되는지 보기 위해서 vest를 이용한 쿼리입니다. 이 방법이 최선일지요..?

CONVERT(BIGINT,LEFT(A.vesting_shares,CHARINDEX('.',A.VESTING_SHARES)-1))

  • 2번째 질문은 follower 수를... 찾아낼수가 없습니다?
    Account 에는 물론이고 다른 곳을 찾아봐도 제 눈엔 보이지 않습니다. DB 내에 있는지요??

잠시만요!

우선
1번은 스팀파워수치를 구한다고 했을 때 저는
FLOOR( CONVERT( NUMERIC, REPLACE( A.VESTING_SHARES , 'VESTS', '' ) ) / 2055.5 )
요렇게 하니 대충 근사치 값이 구해지더군요 ;;; 자세한건 귀찮아서 안찾아봤습니다. ㅋㅋㅋ 그냥 제 vest값과 현재 스팀파워 값으로 역산해서 대충 때려 맞춘 값입니다.

2번같은 경우는 steemsql에는 없고 steemdata라는 서비스에는 있네요. 이건 mysql 서비스인데 steemsql의 mysql 버전 정도로 생각하시면 됩니다.

정 뽑고 싶으시다면 HeidiSQL을 설치하시고 steemdata 를 검색하셔서 접속해보시면 팔로워 정보가 있는 것을 아실수 있습니다.

mysql과 사용방법이 크게 다르지 않아 사용하시는데는 큰 문제가 없을 것입니다. ㅎㅎㅎ

역시 전교일등 nhj12311님... 존경합니다... 누군가가 따라하다니!!!!!!!!!!!! 너무 부러움 ㅜㅜ...

ㅠㅠ 제가 조금 여유 되믄 다시 천천히 따라 해볼 꺼예요. ㅎㅎ

ㅡ.ㅡ;; 베어님을 맨날 따라다니는 저인데 ㅎㅎㅎ

Coin Marketplace

STEEM 0.35
TRX 0.12
JST 0.040
BTC 70601.11
ETH 3576.21
USDT 1.00
SBD 4.78