반응형

출처 : https://stackoverflow.com/questions/24636412/sql-using-case-in-count-and-group-by

group by와 count에서 CASE를 사용하는 SQL

저는 테이블에서 데이터를 분류하기 위해 CASE를 사용하여 그들의 개수를 세었지만 결과가 정확하지 않습니다.

실제 데모는 여기 있습니다.

select DATE(date) as day, count(*),
count(distinct case when name = 'fruit' then 1 else 0 end) as fruits,
count(distinct case when name = 'vege' then 1 else 0 end) as vege,
count(distinct case when name = 'sweets' then 1 else 0 end) as sweets
from food
group by day
with rollup

문제가 CASE에 있는지 또는 문자열 매칭 =에 있는지 확실하지 않습니다. 'sweets'가 없는데 여전히 1로 계산됩니다. 어떤 지적 사항이든 감사합니다.


3 개의 답변 중 1개의 답변

당신의 문제는 NULL이 아닌 모든 결과도 세는데 COUNT를 사용한 것입니다. 당신은 다음처럼 사용했습니다.

COUNT(distinct case when name = 'sweets' then 1 else 0 end)

그래서 이름이 sweets가 아닐 때, 그것을 0으로 세야 합니다. 게다가 DISTINCT를 사용했기 때문에, 하나 또는 두 개의 값을 셀 것입니다. 당신은 SUM을 사용하고 DISTINCT를 삭제하고 ELSE 0을 사용해야 합니다.

SELECT  DATE(date) as day, 
        COUNT(*),
        SUM(CASE WHEN name = 'fruit' THEN 1 ELSE 0 END) as fruits,
        SUM(CASE WHEN name = 'vege' THEN 1 ELSE 0 END) as vege,
        SUM(CASE WHEN name = 'sweets' THEN 1 ELSE 0 END) as sweets
FROM food
GROUP BY DAY
WITH ROLLUP

또는

SELECT  DATE(date) as day, 
        COUNT(*),
        COUNT(CASE WHEN name = 'fruit' THEN 1 ELSE NULL END) as fruits,
        COUNT(CASE WHEN name = 'vege' THEN 1 ELSE NULL END) as vege,
        COUNT(CASE WHEN name = 'sweets' THEN 1 ELSE NULL END) as sweets
FROM food
GROUP BY DAY
WITH ROLLUP

여기는 수정된 sqlfiddle입니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/67093/how-do-i-quickly-rename-a-mysql-database-change-schema-name

MySQL 데이터베이스의 이름(스키마 이름 변경)을 빠르게 변경하는 방법?

MySQL 매뉴얼에서 이를 다루고 있습니다.

주로 저는 데이터베이스를 덤프하여 새로운 이름으로 불러오고는 했습니다. 이는 매우 큰 데이터베이스를 위한 선택지는 아닙니다. RENAME {DATABASE | SCHEMA} db_name TO new_db_name;나쁜 일을 하고 소수에 버전에서만 존재하며 무엇보다도 나쁜 생각입니다.

이것은 MyISAM과는 매우 다르게 InnoDB에서 작동해야 합니다.


49개의 답변 중 1개

InnoDB에서, 다음은 잘 작동합니다: 새로운 빈 데이터베이스를 만들고 새로운 데이터베이스로 각 테이블의 이름을 변경합니다.

RENAME TABLE old_db.table TO new_db.table;

그 후에 권한을 조절할 필요가 있습니다.

shell에서 스크립트로 다음 중 하나를 사용할 수 있습니다.

mysql -u username -ppassword old_db -sNe 'show tables' | while read table; \ 
    do mysql -u username -ppassword -sNe "rename table old_db.$table to new_db.$table"; done

또는

for table in `mysql -u root -ppassword -s -N -e "use old_db;show tables from old_db;"`; do mysql -u root -ppassword -s -N -e "use old_db;rename table old_db.$table to new_db.$table;"; done;

메모:

  • -p 옵션과 암호 사이에는 공백이 없습니다. 데이터베이스에 암호가 없는 경우 -u username -ppassword 부분을 제거하십시오.
  • 일부 테이블에 트리거가 있는 경우 위의 방법을 사용하여 다른 데이터베이스로 이동할 수 없습니다. (잘못된 스키마 트리거 오류가 발생합니다) 이 경우 기존 방법을 사용하여 데이터베이스를 복제한 다음 이전 데이터베이스를 삭제하십시오.
    mysqldump old_db | mysql new_db
  • 만약 stored 프로시저가 있다면 다음처럼 복사할 수 있습니다.
    mysqldump -R old_db | mysql new_db
반응형
반응형

출처 : https://stackoverflow.com/questions/929612/how-to-customize-show-processlist-in-mysql

MySQL에서 'show processlist' 조건을 주는 방법?

저는 시간으로 다음을 정렬하고 싶습니다만, 방법이 없어 보입니다 ?

mysql> show processlist;
+--------+-------------+--------------------+------+---------+--------+----------------------------------+------------------------------------------------------------------------------------------------------+
| Id     | User        | Host               | db   | Command | Time   | State                            | Info                                                                                                 |
+--------+-------------+--------------------+------+---------+--------+----------------------------------+------------------------------------------------------------------------------------------------------+
|      1 | system user |                    | NULL | Connect | 226953 | Waiting for master to send event | NULL                                                                                                 | 
|      2 | system user |                    | v3   | Connect |  35042 | Locked                           | update postings a
                                left join cities b on b.id=a.job_city_id
                                left join states h on h.id=b.stat | 
| 313888 | irnadmin    | 172.19.0.239:40136 | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 314075 | irnadmin    | 172.19.0.239:41113 | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 314118 | irnadmin    | 172.19.0.239:41282 | v3   | Query   |  34978 | freeing items                    | SELECT id, screen_name, type, active, bound, LastLogin, robotno, protocol FROM accounts WHERE email_ | 
| 314686 | irnadmin    | 172.19.0.239:43251 | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 314732 | irnadmin    | 172.19.0.239:43436 | v3   | Query   |  34978 | freeing items                    | SELECT id, screen_name, type, active, bound, LastLogin, robotno, protocol FROM accounts WHERE email_ | 
| 314984 | irnadmin    | 172.19.0.239:44366 | v3   | Sleep   |      2 |                                  | NULL                                                                                                 | 
| 315051 | irnadmin    | 172.19.0.239:44713 | v3   | Query   |      0 | NULL                             | NULL                                                                                                 | 
| 315198 | irnadmin    | 172.19.0.239:51569 | v3   | Sleep   |      2 |                                  | NULL                                                                                                 | 
| 315280 | irnadmin    | 172.19.0.239:51849 | v3   | Query   |  34978 | freeing items                    | SELECT id, email_address, type, closed, robotno FROM accounts WHERE screen_name = 'ShantanuS'        | 
| 315320 | irnadmin    | 172.19.0.239:52045 | v3   | Query   |  34978 | freeing items                    | SELECT id, screen_name, type, active, bound, LastLogin, robotno, protocol FROM accounts WHERE email_ | 
| 315384 | irnadmin    | 172.19.0.239:52463 | v3   | Sleep   |      1 |                                  | NULL                                                                                                 | 
| 452248 | irnadmin    | 172.19.0.28:54899  | v3   | Query   |  34978 | freeing items                    | SELECT id, email_address, type, closed, robotno FROM accounts WHERE screen_name = 'LIZW0218'         | 
| 452291 | irnadmin    | 172.19.0.28:55045  | v3   | Sleep   |      1 |                                  | NULL                                                                                                 | 
| 452316 | irnadmin    | 172.19.0.28:55144  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 452353 | irnadmin    | 172.19.0.28:55278  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 452382 | irnadmin    | 172.19.0.28:55371  | v3   | Query   |  34978 | freeing items                    | SELECT o.account_id FROM online o JOIN accounts a ON a.id=o.account_id WHERE o.server_id IS NULL AND | 
| 452413 | irnadmin    | 172.19.0.28:55479  | v3   | Sleep   |      1 |                                  | NULL                                                                                                 | 
| 452541 | irnadmin    | 172.19.0.28:55946  | v3   | Query   |  34978 | freeing items                    | SELECT o.account_id FROM online o JOIN accounts a ON a.id=o.account_id WHERE o.server_id IS NULL AND | 
| 452626 | irnadmin    | 172.19.0.28:56215  | v3   | Sleep   |      2 |                                  | NULL                                                                                                 | 
| 452711 | irnadmin    | 172.19.0.28:39916  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 452781 | irnadmin    | 172.19.0.28:40161  | v3   | Sleep   |      1 |                                  | NULL                                                                                                 | 
| 452904 | irnadmin    | 172.19.0.28:40955  | v3   | Query   |  34978 | freeing items                    | select a.id, aa.screen_name, i.requester from interview_requests i left join accounts aa on aa.id=i. | 
| 453014 | irnadmin    | 172.19.0.28:41291  | v3   | Query   |  34978 | freeing items                    | SELECT o.account_id FROM online o JOIN accounts a ON a.id=o.account_id WHERE o.server_id IS NULL AND | 
| 453057 | irnadmin    | 172.19.0.28:41377  | v3   | Query   |  34978 | freeing items                    | select a.id, aa.screen_name, i.requester from interview_requests i left join accounts aa on aa.id=i. | 
| 453084 | irnadmin    | 172.19.0.28:41441  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 453112 | irnadmin    | 172.19.0.28:41536  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 453156 | irnadmin    | 172.19.0.28:41653  | v3   | Query   |  34978 | freeing items                    | SELECT protocol FROM accounts WHERE email_address= '***@gtalk.jabber.jobirn.c | 
| 453214 | irnadmin    | 172.19.0.28:41800  | v3   | Sleep   |      5 |                                  | NULL                                                                                                 | 
| 453243 | irnadmin    | 172.19.0.28:41991  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 453313 | irnadmin    | 172.19.0.28:42255  | v3   | Query   |  34978 | freeing items                    | SELECT o.account_id FROM online o JOIN accounts a ON a.id=o.account_id WHERE o.server_id IS NULL AND | 
| 453396 | irnadmin    | 172.19.0.28:53718  | v3   | Sleep   |      2 |                                  | NULL                                                                                                 | 
| 453476 | irnadmin    | 172.19.0.28:54019  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 453561 | irnadmin    | 172.19.0.28:54352  | v3   | Sleep   |      3 |                                  | NULL                                                                                                 | 
| 453594 | irnadmin    | 172.19.0.28:54456  | v3   | Sleep   |      0 |                                  | NULL                                                                                                 | 
| 453727 | irnadmin    | 172.19.0.28:55166  | v3   | Query   |  34978 | freeing items                    | SELECT id, screen_name, type, active, bound, LastLogin, robotno, protocol FROM accounts WHERE email_ | 
| 453786 | irnadmin    | 172.19.0.28:55320  | v3   | Sleep   |      4 |                                  | NULL                                                                                                 | 
| 610140 | irnadmin    | 172.19.0.28:33848  | v3   | Query   |  34978 | freeing items                    | select a.id, aa.screen_name, i.requester from interview_requests i left join accounts aa on aa.id=i. | 
| 685119 | irnadmin    | 172.19.0.27:37251  | v3   | Query   |  34980 | Sending data                     | select postings.id id,category, job_desc_title,
        IF(c1.name is not null,c1.name,IF(c2.name is not n | 
| 685226 | irnadmin    | 172.19.0.139:57274 | v3   | Query   |  34735 | Locked                           | SELECT job_desc_title,job_desc,job_state_name,job_city_name,company_categories.name,postings.categor | 
| 685229 | irnadmin    | 172.19.0.139:57278 | v3   | Query   |  34735 | Locked                           | SELECT job_desc_title,job_desc,job_state_name,job_city_name,company_categories.name,postings.categor | 
| 685232 | irnadmin    | 172.19.0.139:57283 | v3   | Query   |  34734 | Locked                           | select job_desc_title,job_desc from postings where id=287650                                         | 
| 685233 | irnadmin    | 172.19.0.139:57286 | v3   | Query   |  34734 | Locked                           | SELECT accounts.screen_name,postings.url url, accounts.type owner_type, postings.id ID, postings.job | 
| 685235 | irnadmin    | 172.19.0.28:37502  | v3   | Query   |  34734 | Locked                           | SELECT accounts.screen_name,postings.url url, accounts.type owner_type, postings.id ID, postings.job | 
| 686496 | irnadmin    | 172.19.0.239:33306 | v3   | Query   |  32589 | Locked                           | SELECT accounts.screen_name,postings.url url, accounts.type owner_type, postings.id ID, postings.job | 
| 686503 | irnadmin    | 172.19.0.28:54051  | v3   | Query   |  32588 | Locked                           | SELECT job_desc_title, job_desc, IF(postings.category IS NOT NULL, postings.category, job_categories | 
| 709550 | root        | localhost          | v3   | Query   |      0 | NULL                             | show processlist                                                                                     | 
| 710084 | irnadmin    | 172.19.0.27:53285  | NULL | Query   |      0 | removing tmp table               | show status where Variable_name='Threads_running'                                                    | 
+--------+-------------+--------------------+------+---------+--------+----------------------------------+------------------------------------------------------------------------------------------------------+
49 rows in set (0.00 sec)

7개의 답변 중 1개

SQL의 새 버전은 information_schema 에서 프로세스 리스트를 지원합니다.

SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST

당신은 원하는 방법으로 정렬(ORDER BY)할 수 있습니다.

INFORMATION_SCHEMA.PROCESSLIST는 MySQL 5.1.7에 추가되었습니다. 당신이 사용하는 버전을 다음처럼 알 수 있습니다.

SELECT VERSION()
반응형
반응형

출처 : https://stackoverflow.com/questions/769683/postgresql-show-tables-in-postgresql

PostgreSQL에서 테이블 보기

(MySQL의) show tables와 똑같은 쿼리가 PostgreSQL에서는 무엇인가요?


24개의 답변 중 1개를 추려냄

psql 명령어 라인 인터페이스에서

첫째로 원하는 데이터베이스를 선택합니다.

\c database

그리고 이 명령어로 현재 스키마에서 모든 테이블을 볼 수 있습니다.

\dt

(psql 인터페이스로도 당연히 작동하는) 프로그래밍 쿼리로는

SELECT * FROM pg_catalog.pg_tables;

시스템 테이블은 pg_catalog 데이터베이스에 있습니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/13572083/grab-where-curdate-and-the-day-before-with-mysql

MySQL로 어제 날짜와 CURDATE() 얻기

offers.date = CURDATE()

제가 가지고 있는 쿼리입니다.

CURDATE()는 오늘을 얻지만, 어제 값에 대한 주문도 얻고 싶습니다.

어제 날짜를 지정하지 않고 이를 어떻게 할 수 있을까요?


4개의 답변 중 1개

CURDATE를 interval(예시 어제) 값으로 빼기 혹은 더하기를 사용하기 위해 당신은 DATE_ADD 함수를 사용할 수 있습니다.

SELECT DATE_ADD(CURDATE(), INTERVAL -1 DAY);

당신의 쿼리같은 경우, 다음처럼 사용할 수 있습니다.

WHERE offers.date = CURDATE() OR offers.date = DATE_ADD(CURDATE(), INTERVAL -1 DAY)

부가적으로 당신은 음수 간격을 사용하는 대신에 같은 의미로 양수 간격을 사용하는 DATE_SUB() 함수도 사용할 수 있습니다.

그러므로 DATE_ADD(CURDATE(), INTERVAL -1 DAY)DATE_SUB(CURDATE(), INTERVAL 1 DAY)가 될 수 있습니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/14048098/count-distinct-with-conditions

조건과 함께 중복제거 개수 세기(COUNT DISTINCT with CONDITIONS)

저는 특정 조건으로 열 이름으로 고유한 항목의 수를 계산하고 싶습니다. 예를 들어 다음과 같은 테이블이 있습니다.

tag | entryID
----+---------
foo | 0
foo | 0
bar | 3

고유 태그 수를 "태그 수"로 계산하고 항목 ID가 0보다 큰 고유 태그 수를 동일한 테이블에서 "양수 태그 수"로 계산하려면 어떻게 해야 합니까?

이제 두 번째 테이블에서 entryID가 0보다 큰 행만 선택한 두 개의 다른 테이블에서 계산하고 있습니다. 이 문제를 해결할 수 있는 더 간결한 방법이 있어야 한다고 생각합니다.


5개의 답변 중 1개를 추려냄

다음을 시도할 수 있습니다.

select
  count(distinct tag) as tag_count,
  count(distinct (case when entryId > 0 then tag end)) as positive_tag_count
from
  your_table_name;

첫번째 count(distinct...)는 쉽습니다. 두번째는 다소 복잡해 보이지만, case...when 구문을 사용한 것만 제외하면 첫번째 것과 똑같습니다. case...when 구문에서 양수 값만 필터링합니다. 0과 음수 값은 null로 평가되며 개수를 계산하지 않습니다.

여기서 주목해야 할 점은 테이블을 한 번만 읽으면 이 작업을 수행할 수 있다는 것입니다. 같은 표를 두 번 이상 읽어야 할 것 같지만 실제로는 대부분의 시간에 한 번에 읽을 수 있습니다. 결과적으로 더 적은 입출력으로 작업을 훨씬 빠르게 완료합니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/50494508/redshift-division-result-does-not-include-decimals

Redshift의 나누기 결과는 소수점을 포함하지 않습니다.

저는 Redshift에서 2개의 열을 나눈 퍼센트를 계산하기 위해 매우 기초적인 연산을 시도하였습니다. 하지만, 제가 다음 쿼리를 실행하였을 때 그 결과는 그냥 0이 나오고 소수점이 커버되지 않습니다.

코드:

select 1701 / 84936;

결과:
| |컬럼?|
|-|-|
|1|0|

이것도 시도했는데

select cast(1701 / 84936 as numeric (10,10));

결과는 0.0000000000 이었습니다.

어떻게 이를 해결할 수 있을까요?


2개의 답변 중 1개를 추려냄

위는 정수 나누기입니다. 하나의 값이 적어도 숫자(정확한 데이터 타입)나 FLOAT(주의: 이는 근사의 데이터 타입) 타입임을 보장해야 합니다.

It is integer division. Make sure that at least one argument is: NUMERIC(accurate data type)/FLOAT(caution: it's approximate data type):

/ 나누기 (정수 나누기는 결과를 버립니다.)

select 1701.0 / 84936;
-- or
SELECT 1.0 * 1701 / 84936;
-- or
SELECT CAST(1701 AS NUMERIC(10,4))/84936;

DBFiddle Demo

반응형
반응형

출처 : https://stackoverflow.com/questions/17492167/group-query-results-by-month-and-year-in-postgresql

postgresql에서 년월로 결과 쿼리를 그룹화하기

Postgres 서버에 다음과 같은 데이터베이스 테이블이 있습니다.

id      date          Product Sales
1245    01/04/2013    Toys    1000     
1245    01/04/2013    Toys    2000
1231    01/02/2013    Bicycle 50000
456461  01/01/2014    Bananas 4546

저는 다음처럼 Sales의 년월로 결과를 그룹화한 합계를 제공하는 쿼리를 만들고 싶습니다.

Apr    2013    3000     Toys
Feb    2013    50000    Bicycle
Jan    2014    4546     Bananas

이를 할 수 있는 간단한 방법이 있을까요?


7개의 답변 중 1개를 추려냄

저는 채택한 답변이 많은 좋아요 추천을 받았다는 것을 믿을 수 없습니다. -- 끔직한 방법입니다.

data_trunc로 이를 할 수 있는 올바른 방법입니다.

   SELECT date_trunc('month', txn_date) AS txn_month, sum(amount) as monthly_sum
     FROM yourtable
 GROUP BY txn_month

나쁜 방법이지만 다음처럼 사용할 수도 있습니다.

 GROUP BY 1

만약 날짜를 select하지 않는다면 다음처럼 사용할 수 있습니다.

 GROUP BY date_trunc('month', txn_date)
반응형
반응형

참고주소 : https://stackoverflow.com/questions/7368163/how-can-i-convert-a-string-to-a-float-in-mysql

mysql에서 문자열을 float으로 어떻게 형변환 할 수 있을까요?

저는 위도와 경도 값을 문자열(VARCHAR)로 저장한 테이블이 있습니다. 이를 FLOAT (10,6)으로 형변환하고 싶습니다.

하지만 CAST()CONVERT()를 사용하여 직관적인 방법으로는 할 수 없는 거 같습니다.

어떻게 이 열(컬럼)을 쉽게 형변환 할 수 있을까요? 한 번에 변환하고 싶습니다.


3개 답변 중 1개

CAST() 설명에서 DECIMAL 부분을 놓쳤음을 알게 되었습니다.

DECIMAL[(M[,D])]
DECIMAL 데이터 타입의 값으로 형변환 합니다. 옵션 값인 M, D는 정확도 (M은 자리수의 전체 수)이며 십진수 값의 소수점 단위(scale, D는 소수점 자리 뒤에 자리수)입니다. 기본 정확도는 소수점 뒤에 2자리 입니다.

그러므로 다음 쿼리는 작동합니다.

UPDATE table SET
latitude = CAST(old_latitude AS DECIMAL(10,6)),
longitude = CAST(old_longitude AS DECIMAL(10,6));
반응형
반응형

출처 :https://stackoverflow.com/questions/2472229/insert-into-select-from-on-duplicate-key-update

INSERT INTO … SELECT FROM … ON DUPLICATE KEY UPDATE

저는 만약 키가 이미 있을 경우 대부분의 많은 컬럼이 갱신될 필요가 있는 insert 쿼리를 실행하려 합니다.
다음처럼 진행하려 하는데요.

INSERT INTO lee(exp_id, created_by, 
                location, animal, 
                starttime, endtime, entct, 
                inact, inadur, inadist, 
                smlct, smldur, smldist, 
                larct, lardur, lardist, 
                emptyct, emptydur)
SELECT id, uid, t.location, t.animal, t.starttime, t.endtime, t.entct, 
       t.inact, t.inadur, t.inadist, 
       t.smlct, t.smldur, t.smldist, 
       t.larct, t.lardur, t.lardist, 
       t.emptyct, t.emptydur 
FROM tmp t WHERE uid=x
ON DUPLICATE KEY UPDATE ...; 
//update all fields to values from SELECT, 
//       except for exp_id, created_by, location, animal, 
//       starttime, endtime

저는 UPDATE 구문을 위한 문법에 무엇이 와야 되는지 확실하지 않습니다. SELECT 구문으로부터 현재 행을 어떻게 참조할 수 있을까요?

2개의 답변 중 1개의 답변만 추려냄

MySQL은 INSERT INTO 구문에서 등호 앞에 부분이 컬럼(필드)명을 참조하고 SELECT 컬럼(필드)를 등호 뒤에 두번째 부분에서 참조한다고 가정합니다.

INSERT INTO lee(exp_id, created_by, location, animal, starttime, endtime, entct, 
                inact, inadur, inadist, 
                smlct, smldur, smldist, 
                larct, lardur, lardist, 
                emptyct, emptydur)
SELECT id, uid, t.location, t.animal, t.starttime, t.endtime, t.entct, 
       t.inact, t.inadur, t.inadist, 
       t.smlct, t.smldur, t.smldist, 
       t.larct, t.lardur, t.lardist, 
       t.emptyct, t.emptydur 
FROM tmp t WHERE uid=x
ON DUPLICATE KEY UPDATE entct=t.entct, inact=t.inact, ...

2개의 팁 추가 번역

  • @dnagirl: : PK 컬럼중 어느것도 update하지 마세요. 리스트에서 갱신할 필요가 있는 것만 update하세요.
  • 당신이 제안한 문법은 작동하며 t.가 요구됩니다. 저는 xaprb의 블로그글(xaprb.com/blog/2006/02/21/flexible-insert-and-update-in-mysql)에서 이 문법 on duplicate key update b = values(b), c = values(c)을 보았습니다. 이것도 작동합니다.
반응형

+ Recent posts