글

라벨이 GROUP BY인 게시물 표시

PostgreSQL 날짜별로 횟수 조회하기(DATE_TRUNC)

이미지
  postgres에서 해당 테이블을 생성합니다. $ CREATE TABLE users(id INT PRIMARY KEY NOT NULL, name TEXT NOT NULL, created_at TIMESTAMP WITH TIME ZONE DEFAULT now()) 이후 아래 레코드를 입력합니다. $ INSERT INTO users(id, name, created_at) VALUES (1,'알렉스', '2022-10-12 01:00:00+09'), (2,'존', '2022-10-12 01:10:00+09'), (3,'피닉스', '2022-10-12 11:20:00+09'), (4,'폴', '2022-10-13 01:00:30+09'), (5,'스카', '2022-10-13 07:30:00+09'), (6,'알폰스', '2022-10-14 01:00:00+09'), (7,'미미', '2022-10-15 01:00:00+09'), (8,'크레이토스', '2022-10-15 01:00:00+09'), (9,'제우스', '2022-10-15 01:10:00+09'), (10,'아테나', '2022-10-16 01:00:00+09') 테이블을 조회하면 아래 사진과 같이 나오는 것을 알수 있습니다. 이제 날짜별로 생성된 유저수를 확인할려고 합니다. 현재는 날짜 기준으로 생성날자를 카운트 할려고한다. 문제는 날짜가 같아도 생성 시간이 달라서 GROUP BY를 하지 못합니다. 이때 DATE_TRUNC를 사용합니다. $ SELECT DATE_TRUNC('day', "created_at") AS date, COUNT(*) FROM users GROUP BY date...

SQL Postgres의 다중 tag검색하기 Many to Many

이미지
  위 사진처럼 커피(coffees)와 향(flavor) 테이블 사이에 Join 테이블이 있습니다. 해당 Join테이블은 한개의 row에 하나의 flavor만 조회가 가능합니다. 만약 2개 이상의 향이 있는 커피를 찾는다면 아래 쿼리문을 사용해야 합니다. -- SQL Query1  SELECT DISTINCT title   FROM coffees JOIN coffees_flavors_flavor ON coffees.id = "coffeesId"                 JOIN flavor ON flavor.id = "flavorId"  WHERE flavor.name = 'choco' OR flavor.name = 'banana'; Query1을 사용하면 Join, OR문을 이용하여 choco 또는 banana가 있는 레코드를 조회합니다. 문제는 choco는 있지만 banana가 없거나 반대의 경우도 모두 조회를 한다는 것입니다. 이를 위해서 GROUP BY를 사용하며 해당 갯수를 count해서 조회해야 합니다. -- SQL Query2   SELECT DISTINCT title, COUNT(*) as count   FROM coffees JOIN coffees_flavors_flavor ON coffees.id = "coffeesId"                 JOIN flavor ON flavor.id = "flavorId"  WHERE flavor.name = 'choco' OR flavor.name = 'banana'  GROUP BY title  HAVING flavor.count = 2; Query2를 사용하면 구할려고 하는 해당 title을 조회할수 있습니다.

DBMS MySQL - SQL5 : GROUP BY 레코드를 그룹으로 묶기

이미지
이전글 :DBMS MySQL - SQL4 : LIMIT, LIKE -> 조회수 제한 및 키워드로 DB조회하기   안녕하세요. 알렉스입니다. 이번에는 SQL문을 이용하여 레코드를 그룹으로 만들고 그것을 사용하는 것에 대해서 알아보겠습니다. 1. GROUP BY 'GROUP BY'는 컬럼내에서 같은 레코드가 있을때 그것을 묶어줍니다. GROUP BY는 ORDER BY 처럼 단독으로 사용될수 없고 다른 sql구문들과 갖이 사용해댜 합니다. 일단 간단한 그룹을 설정하고 그 그룹에 있는 레코드의 개수를 새 보도록 하겠습니다. $ SELECT COUNT(*), [Column Name1] FROM [Table Name] GROUP BY [Column Name1] [Column Name1]과 각각 일치하는 레코드의 수를 구한다. copy 사진1) GROUP로 조회 하지만 GROUP BY로 조회할시 오류가 나는 경우가 있습니다.  사진2) GROUP BY 오류 사진2에서는 모든 컬럼을 갖고 똑같이 released_year로 GROUP BY를 할려고 했습니다. 하지만 MySQL에서 거부를 했습니다. 이유는 id컬럼 때분입니다. id는 각각의 레코드마다 다 다르기 때문에 하나로 합칠수가 없습니다. 사진1에서는 COUNT를 이용하여 수량을 셋기 때문에 상관 없지만 GROUP BY로 나타낼때는 동일해야 합니다.