일별로 그룹화할 SQL 쿼리
모든 매출을 나열하고, 합계를 일별로 분류하고 싶습니다.
Sales (saleID INT, amount INT, created DATETIME)
메모: SQL Server 2005를 사용하고 있습니다.
SQL Server를 사용하는 경우
dateadd(DAY,0, datediff(day,0, created))
생성된 날짜를 반환합니다.
예를 들어, '2009-11-02 06:12:55.000'에 판매가 발생한 경우,dateadd(DAY,0, datediff(day,0, created))
'2009-11-02 00:00:00.000'을 반환합니다.
select sum(amount) as total, dateadd(DAY,0, datediff(day,0, created)) as created
from sales
group by dateadd(DAY,0, datediff(day,0, created))
SQL Server의 경우:
GROUP BY datepart(year, datefield),
datepart(month, datefield),
datepart(day, datefield)
이상(Q8-Coder부터):
GROUP BY dateadd(DAY, 0, datediff(day, 0, created))
MySQL의 경우:
GROUP BY year(datefield), month(datefield), day(datefield)
(Jon Bright에서):
GROUP BY date(datefield)
Oracle의 경우:
GROUP BY to_char(datefield, 'yyyy-mm-dd')
이상(IronGuofy에서):
GROUP BY trunc(created);
Informix의 경우(Jonathan Leffler 지음):
GROUP BY date_column
GROUP BY EXTEND(datetime_column, YEAR TO DAY)
MySQL을 사용하는 경우:
SELECT
DATE(created) AS saledate,
SUM(amount)
FROM
Sales
GROUP BY
saledate
MS SQL 2008을 사용하는 경우:
SELECT
CAST(created AS date) AS saledate,
SUM(amount)
FROM
Sales
GROUP BY
CAST(created AS date)
포스트그레용SQL:
GROUP BY to_char(timestampfield, 'yyyy-mm-dd')
또는 캐스트 사용:
GROUP BY timestampfield::date
속도를 원하는 경우 두 번째 옵션을 사용하여 인덱스를 추가합니다.
CREATE INDEX tablename_timestampfield_date_idx ON tablename(date(timestampfield));
실제로는 사용하는 DBMS에 따라 다르지만 일반 SQL에서는convert(varchar,DateColumn,101)
DATETIME 형식을 최신(1일)으로 변경합니다.
따라서:
SELECT
sum(amount)
FROM
sales
GROUP BY
convert(varchar,created,101)
매직스 넘버101
변환되는 날짜 형식입니다.
SQL Server를 사용하는 경우 테이블에 다음 세 가지 계산 필드를 추가할 수 있습니다.
Sales (saleID INT, amount INT, created DATETIME)
ALTER TABLE dbo.Sales
ADD SaleYear AS YEAR(Created) PERSISTED
ALTER TABLE dbo.Sales
ADD SaleMonth AS MONTH(Created) PERSISTED
ALTER TABLE dbo.Sales
ADD SaleDay AS DAY(Created) PERSISTED
판매 일수, 월수, 연도별로 그룹화, 주문 등을 쉽게 할 수 있게 되었습니다.
SELECT SaleDay, SUM(Amount)
FROM dbo.Sales
GROUP BY SaleDay
계산된 필드는 항상 최신 상태로 유지됩니다('작성' 날짜가 변경되면 테이블의 일부이며 일반 필드와 마찬가지로 사용할 수 있습니다.또한 "PERSISTed"인 경우 색인화할 수도 있습니다.이는 완전히 사용되지 않는 뛰어난 기능입니다.
마크
오라클의 경우
group by trunc(created);
생성된 날짜 시간이 이전 자정으로 잘리기 때문입니다.
또 다른 방법은
group by to_char(created, 'DD.MM.YYYY');
같은 결과를 얻을 수 있지만 유형 변환이 필요하기 때문에 속도가 느려질 수 있습니다.
MySQL을 위한 가장 심플하고 직관적인 솔루션은 다음과 같습니다.
GROUP BY day(datefield)
linq를 사용하다
from c in Customers
group c by DbFunctions.TruncateTime(c.CreateTime) into date
orderby date.Key descending
select new
{
Value = date.Count().ToString(),
Name = date.Key.ToString().Substring(0, 10)
}
언급URL : https://stackoverflow.com/questions/1658340/sql-query-to-group-by-day
'programing' 카테고리의 다른 글
데이터베이스에 보기를 작성하는 이유는 무엇입니까? (0) | 2023.04.07 |
---|---|
Link-to-Sql: 여러 왼쪽 외부 결합 (0) | 2023.04.07 |
SQL Server:크로스 조인(CROSS JOIN)과 풀 아우터 조인(FULL OUTER JOIN)의 차이점은 무엇입니까? (0) | 2023.04.07 |
서버 주체가 SQL Server MS 2012의 현재 보안 컨텍스트에서 데이터베이스에 액세스할 수 없습니다. (0) | 2023.04.07 |
Angular에서 $location으로 리디렉션하는 방법.path를 $120으로 지정합니다.성공 후 콜백 (0) | 2023.04.02 |