2010-12-21 110 views
3

我有一個SQL表包括:SELECT語句來計算元素

[title] 
ElementA 
ElementA 
ElementB 
ElementC 
ElementA 
ElementA 

我試圖找到一種方法來計算時出現的大部分元素;在這個例子中,那將是 4,因爲ElementA已發生4次。問題是,這個表是動態的,所以我不能只說SELECT COUNT(*) WHERE title = 'ElementA';

有沒有人有任何想法如何撰寫SELECT聲明來做到這一點?從概念上講,這似乎很簡單,但我不能讓它工作。

非常感謝, 佈雷特

+0

家庭作業?當答案出現在每本SQL書的第一章時,總會產生懷疑。 – 2010-12-21 22:11:28

回答

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子句)。

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 2010-12-21 15:25:34

+0

@Ttoni不,他沒有在內部選擇順序,它可以是任何行 – 2010-12-21 15:28:02

+0

@bernd_k:我會發誓它在那裏,當我寫評論,但我沒有看到編輯歷史,所以它一定是我有限的視野:-) – TToni 2010-12-21 15:30:36

2

試試這個得到一個完整的列表

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

只得到最高的狗,用一些味道變化下面通過對組,以滿足您的SQL語法

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

使用一組元素後跟一個最大值相應的計數..使用嵌套查詢,使解決方案更簡單.. :)

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 
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