2010-12-21 3 views
3

요소를 계산하려면 :SELECT 문은 내가 SQL 테이블로 구성이

[title] 
ElementA 
ElementA 
ElementB 
ElementC 
ElementA 
ElementA 

내가 가장 발생 요소를 계산하는 방법을 찾기 위해 노력하고있다을; 이 예에서 ElementA이 4 번 발생했기 때문에 4이됩니다. 문제는,이 테이블은 동적이기 때문에 나는 말할 수 없다.

아무에게도 이것을 수행하기 위해 SELECT 구문을 작성하는 방법을 알고 있습니까? 개념적으로, 그것은 매우 단순 해 보이지만, 나는 그것을 작동시키지 못합니다. 사용중인 제품에 따라

많은 감사, 브렛

+0

숙제? 답변이 모든 SQL 책의 첫 번째 장에있을 때 항상 의심 스럽습니다. –

답변

4
SELECT TOP 1 Title, COUNT(*) FROM table GROUP BY Title ORDER BY 2 DESC 

또는

SELECT Title, COUNT(*) FROM table GROUP BY Title ORDER BY 2 DESC LIMIT = 1 

.

(ORDER BY 절을 수정하여 편집 됨).

+0

제목순으로 주문 하시겠습니까? –

+0

"TOP 1"에 "ORDER BY Title"이 있습니까? 나는 이것이 당신에게 가장 많은 요소가있는 요소를 줄 것이라고 생각하지 않습니다. – TToni

+0

죄송합니다. 감사합니다. 물론, 하나는 제목이 아니라 개수로 주문하고 싶어합니다. –

3
Select TOP 1 Title 

FROM 


(

Select 
    Count(title) k, title 
FROM 
    titles 
GROUP BY 
    TITLE 

) Count 

ORDER BY 
     k Desc 
+0

"TOP 1"을 두 번째 선택 항목에 넣겠습니다.하지만 그건 화장품 일뿐입니다. – TToni

+0

@ 트 토니 아니, 그는 안쪽 선택에 의해 순서가 없다, 어떤 행이 될 수있다 –

+0

@bernd_k : 나는 코멘트를 썼을 때 그곳에 있었다고 맹세 하겠지만 편집 내역은 볼 수 없으므로 내 제한된 비전이 틀림 없다. :-) – TToni

2

그냥 상단 개를 얻으려면, 그룹으로하여 SQL 구문

SELECT TOP 1 Title, NumOccurences 
FROM 
(
    SELECT Title, Count (*) NumOccurences 
    FROM MyTable 
    GROUP BY Title 
    Order BY Count (*) DESC 
) AS Titles 
+0

"TOP 1"을주고 그 순서에 따라 DESC를 추가하면 사업을 시작하게됩니다. OP가 제목 :-)을 묻는 것 외에는 – TToni

+0

사실, 가장 큰 것이 아닌 _ 최하위 수를 얻습니다. –

+0

** ORDER BY NumOccurences **를 사용하면 RDBMS의 기능을 활용할 수 있습니다 (Sql Server, Postgresql, MySQL은 예상 데이터에서 ORDER BY를 수행 할 수 있습니다.이자형. ORDER BY에 별명을 사용할 수 있음). 이는 읽을 수있는 프로그램을 만듭니다. 어쨌든, 만약 Access를 사용한다면, ** ORDER ** 절에 대한 작업을 반복 할 수밖에 없다. : –

0

사용 그룹에 맞게 약간의 맛의 변화와 함께 다음을 사용

SELECT Title, Count (*) as NumOccurences 
FROM MyTable 
GROUP BY Title 
Order BY NumOccurences 

전체 목록을 얻기 위해이 시도 각 요소에 대한 최대 값 다음에 요소가옵니다. 솔루션을보다 간단하게 만들기 위해 중첩 된 쿼리를 사용합니다. :)

1

SQL Server :

SELECT TOP 1 
    Title, COUNT(*) AS Count 
FROM tbl 
GROUP BY Title 
ORDER BY Count DESC 

PostgreSQL을, MySQL은, 등 :

SELECT 
    Title, COUNT(*) AS Count 
FROM tbl 
GROUP BY Title 
ORDER BY Count DESC 
LIMIT 1 
+1

컬럼의 이름으로 예약어'COUNT' 사용을 권장하지 않는다. –

+0

실제로 괜찮습니다. SELECT는 투영 절이므로 실행 된 마지막 작업 (필터링, 그룹화 후)이므로 다른 작업에는 영향을 미치지 않으므로 설명적인 이름을 사용하는 것이 좋습니다. SQL이 LINQ 절을 따르는 경우 (**에서 **가 먼저옵니다. ** select **가 마지막에옵니다). 레코드의 p에서 new {Title = p.Key, Count = p.Count()}}를 선택하면 설명적인 이름이 홀수가 아닙니다. 각자 자신에게 :-) –

+0

수행 할 수있는 모든 일을 수행해야하는 것은 아닙니다. 나는 Raj와 함께 가야 만한다. "count"를위한 많은 비 예약 동의어가있다. –

0
WITH CTE (Title, Counter) as 
(SELECT Title, Count(*) Counter FROM #Test GROUP BY Title) 

SELECT Top 1 Title, Counter FROM CTE order by Counter Desc