SQL 쿼리 도움말:특정 횟수만큼 나타나는 행 선택
문제
"날짜" 열이 있는 테이블이 있습니다.각 날짜는 여러 번 나타날 수 있습니다.k번 미만으로 나타나는 날짜만 선택하려면 어떻게 해야 합니까?
해결책
select dates
from table t
group by dates having count(dates) < k ;
다행히 ORACLE에서는 작동합니다.HTH
다른 팁
SELECT * FROM [MyTable] WHERE [Date] IN
(
SELECT [Date]
FROM [MyTable]
GROUP By [Date]
HAVING COUNT(*) < @Max
)
@[SQLMenace]의 응답도 참조하세요.이는 이와 매우 유사하지만 최적화 프로그램이 차이를 문제 삼지 않는다고 가정하면 데이터베이스에 따라 JOIN이 더 빠르게 실행될 것입니다.
COUNT 집계를 사용하십시오.
SELECT Date
FROM SomeTable
GROUP BY Date
HAVING COUNT(*) < @k
예
DECLARE @Max int
SELECT @Max = 5
SELECT t1.*
FROM [MyTable] t1
JOIN(
SELECT [Date]
FROM [MyTable]
GROUP By [Date]
HAVING COUNT(*) < @Max
) t2 on t1.[Date] = t2.[Date]
"x회 표시" 쿼리의 경우 HAVING 절을 사용하는 것이 가장 좋습니다.귀하의 경우 쿼리는 다음과 같습니다.
SELECT Date FROM table GROUP BY Date HAVING COUNT(*)<k
또는 날짜를 제외한 다른 열을 선택해야 합니다.
SELECT * FROM Table WHERE Date IN (
SELECT Date FROM table GROUP BY Date HAVING COUNT(*)<k)
IN을 INNER JOIN으로 다시 작성할 수도 있지만 실제로 대부분의 RDBMS에서 쿼리 최적화 프로그램이 이 작업을 수행하므로 성능이 향상되지는 않습니다.날짜에 대한 인덱스가 있으면 이 쿼리의 성능이 확실히 향상됩니다.
SELECT date, COUNT(date)
FROM table
GROUP BY date
HAVING COUNT(date) < k
그런 다음 원본 데이터를 다시 가져오려면 다음을 수행하세요.
SELECT table.*
FROM table
INNER JOIN (
SELECT date, COUNT(date)
FROM table
GROUP BY date
HAVING COUNT(date) < k) dates ON table.date = dates.date
Oracle을 사용한다고 가정하고 k = 5:-
select date_col,count(*)
from your_table
group by date_col
having count(*) < 5;
날짜 열에 시간도 채워져 있고 이를 무시하려면 다음과 같이 쿼리를 수정하세요.
select trunc(date_col) as date_col,count(*)
from your_table
group by trunc(date_col)
having count(*) < 5;
날짜에 시간이 포함된 경우 날짜 필드에서 직접 계산하지 못할 수도 있습니다.먼저 연/월/일 형식으로 변환한 다음 그에 따라 계산해야 할 수도 있습니다.
그렇지 않으면 일반적으로 정확히 동일한 시간의 기록이 거의 없기 때문에 카운트가 무효화됩니다.
제휴하지 않습니다 StackOverflow