Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql SELECT语句对元素进行计数_Sql_Database - Fatal编程技术网

Sql SELECT语句对元素进行计数

Sql SELECT语句对元素进行计数,sql,database,Sql,Database,我有一个SQL表,包括: [title] ElementA ElementA ElementB ElementC ElementA ElementA 我试图找到一种方法来计算发生最多的元素;在本例中,这将是 4因为ElementA已经发生了4次。问题是,这个表是动态的,所以我不能只说selectcount(*),其中title='ElementA' 有人知道如何编写一个SELECT语句来实现这一点吗?从概念上讲,这似乎很简单,但我就是不能让它工作 非常感谢,, 布雷特 或 取决于您使用的产品

我有一个SQL表,包括:

[title]
ElementA
ElementA
ElementB
ElementC
ElementA
ElementA
我试图找到一种方法来计算发生最多的元素;在本例中,这将是
4
因为
ElementA
已经发生了4次。问题是,这个表是动态的,所以我不能只说
selectcount(*),其中title='ElementA'

有人知道如何编写一个
SELECT
语句来实现这一点吗?从概念上讲,这似乎很简单,但我就是不能让它工作

非常感谢,, 布雷特

取决于您使用的产品


(编辑以更正ORDER BY子句)。

尝试此操作以获得完整的列表

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

使用group by对元素进行分组,并在每个计数后加上max on der。。使用嵌套查询使解决方案更简单:)

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。如果他们没有不这样做的话,这些问题也会出现在其他答案中:D lold给它一个“TOP 1”,然后在该顺序中添加一个DESC by,那么你就开始做生意了。除了OP只要求标题:-)实际上,这得到的计数最少,而不是最大。您可以使用ORDER BY NumoCurences,利用RDBMS的功能(Sql Server、Postgresql、MySQL可以对投影数据执行ORDER BY,即可以对ORDER BY使用别名),这使得程序具有可读性。无论如何,如果一个人正在使用Access,除了重复ORDER子句上的操作外,别无选择:-)我会将“TOP 1”放在第二个select中,但我想那只是化妆品。@Ttoni不,他在内部select中没有ORDER by,它可能是任意的row@bernd_k:我发誓我写评论的时候它就在那里,但我看不到编辑历史,因此,这一定是我有限的视野:-)@TToni我犯了一个格式错误,将orderby与其余部分分开并修复了它。因此,如果你做得足够快,就不要输入编辑历史记录。我认为这个选择不需要嵌套查询。我不建议使用保留字
COUNT
作为列的名称。事实上,这很好。SELECT是一个投影子句,因此是执行的最后一个操作(即过滤、分组后),不会影响其他操作,因此建议使用描述性名称。如果SQL遵循LINQ子句的顺序(from优先,select最后),例如从记录中的p选择new{Title=p.Key,Count=p.Count())},那么描述性名称并不奇怪。所以,对每个人来说:——)不是所有能做的事情都应该做。我得跟拉杰说,“伯爵”有很多非保留的同义词。不是因为它可以做到,而是因为这样做很自然。此外,我使用的是Postgres,这就是为什么这个理由。如果您没有在
COUNT(*)
或任何函数上添加别名,则会在resultset上投影函数的名称。这与声明变量的名称与其类型的名称相同,
publicdatasetDataSet{get;}
。在那份作业上没有可以推断的模糊性?当答案出现在每本SQL书籍的第一章时,总是很可疑。
SELECT TOP 1 Title, NumOccurences
FROM 
(
    SELECT Title, Count (*) NumOccurences
    FROM MyTable
    GROUP BY Title
    Order BY Count (*) DESC
) AS Titles
SELECT TOP 1 
    Title, COUNT(*) AS Count
FROM tbl
GROUP BY Title
ORDER BY Count DESC
SELECT 
    Title, COUNT(*) AS Count
FROM tbl
GROUP BY Title
ORDER BY Count DESC
LIMIT 1
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