2010-12-21 111 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