database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 30878 게시물 읽기
No. 30878
mysql 쿼리 질문 있습니다.
작성자
이준영
작성일
2015-09-21 17:19
조회수
6,944

아래와 같이 날짜별 유저의 골드 보유량 테이블에 데이터가 있을 때,

날짜별 전체 유저의 보유량 합산 정보를 select 하고 싶은데 쿼리를 어떻게 짜야 할지 감이 오질 않습니다. ㅠㅠ

 

 date    , user_id , 보유량

'20150729','100', '10600'

'20150729','105', '9900'

'20150729','88', '10100'

'20150730','100', '10300'

'20150801','100', '12300'

'20150801','105', '9000'

'20150804','100', '12500'

'20150810','100', '2000'

'20150815','100', '13500'

'20150816','101', '1000'

'20150817','102', '2000'

'20150818’,'102', '1500'

 

 

select 결과가 아래와 같이 나오기를 바랍니다.

유저별 최신날짜의 보유량을 sum한 결과를 얻고 싶은 겁니다.

고수님들의 도움 부탁드립니다. ㅠ.ㅠ

date              sum_of_amount

 20150729      30600 (10600+9900+10100)

 20150730      30300 (10300+9900+10100)

 20150801      31400 (12300 +9000+10100)

 20150804      31600 ( 12500 +9000+10100)

 

이 글에 대한 댓글이 총 3건 있습니다.

group_concat 을 이용하면됩니다,

조회해보세요

 

이기자(k3i2)님이 2015-09-22 10:28에 작성한 댓글입니다.

 괄호안은 이해를 돕기 위해 표시한 정보입니다. :)

 

우선 다른 사이트에서 위 쿼리를 해결하는 방법을 알려주셨습니다.

 

CREATE TABLE `test1` (

  `date_` varchar(8) DEFAULT NULL,
  `user_id` varchar(5) DEFAULT NULL,
  `gold` int(11) DEFAULT NULL
)

SELECT z.inputdate DATE, SUM(gold) sum_of_amount FROM test1 a, (
SELECT inputdate, user_id, MAX(date_) mydate FROM (
SELECT  b.date_ inputdate, a.user_id, a.date_, a.gold  FROM test1 a, (SELECT DISTINCT(date_) FROM test1 ORDER BY date_ ASC) b WHERE A.DATE_<= B.DATE_ ORDER BY b.date_, a.user_id ASC
) Y  GROUP BY inputdate, user_id
) z WHERE a.user_id = z.user_id AND a.date_ = z.mydate

 

하지만 데이터가 워낙 방대하여 성능상의 이유로 결국은 다른 방법을 찾아야 하네요.ㅠ

이준영님이 2015-09-22 17:13에 작성한 댓글입니다. Edit

SELECT date_
     , @x := @x + gold AS gold
  FROM (SELECT date_
             , SUM(gold) gold
          FROM (SELECT user_id, date_
                     , gold - CASE @user_id WHEN user_id
                              THEN @gold ELSE 0 END AS gold
                     , @gold    := gold
                     , @user_id := user_id
                  FROM (SELECT user_id, date_, gold
                          FROM test1
                         ORDER BY user_id, date_
                        ) a
                     , (SELECT @user_id := '', @gold := 0, @x := 0) b
                ) a
         GROUP BY date_
        ) a
;

마농(manon94)님이 2015-09-22 20:26에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
30881질문있습니다. [2]
두키
2015-10-05
6602
30880댓글 테이블은 쪼개는게 좋을까요? 합쳐서 구분을 두는 게 좋은 가요? [1]
조태성
2015-09-30
6682
30879쿼리 질문 있습니다 [1]
이기자
2015-09-22
6756
30878mysql 쿼리 질문 있습니다. [3]
이준영
2015-09-21
6944
30877mysql 시간계산 문의드려요~
박경남
2015-09-21
6650
30876MSSQL에서 사용하던 WITH AS 를 MySQL에서 사용할 수 있나요 [4]
ADAM
2015-09-17
6723
30874in조건문 조회시 해결할 문제가 있습니다. [1]
이기자
2015-09-08
6848
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다