统计每个独特的内容

时间:2013-11-28 07:47:53

标签: sql-server

如何计算字段name的内容出现在我的表格中的次数?

Name    | Other
Brad    | smth
Brad    | smth
Daniel  | smth
Matt    | smth
Matt    | smth
Matt    | smth

例如,对于上表,我想知道我有多少次'布拉德',多少次'丹尼尔'和多少次'马特'。我怎么做只有一个选择? 我对此感兴趣,因为我想只显示出现次数超过给定值的名称。

我的实际代码:

select director.LastName,director.FirstName,count(director.FirstName)as counter,film.title
from director,film
where film.Id_Director=director.id 
group by director.LastName,director.FirstName,film.title
having  count(Director.FirstName)>2

    Baz Luhrmann    1   Paranormal activity 4
    Baz Luhrmann    1   Struck by lightning
    Baz Luhrmann    1   The big bang theory
    Baz Luhrmann    1   The family
    Baz Luhrmann    1   The Quarterback
    Brad Falchuk    1   A Kitty or a Gaga
    Brad Falchuk    1   All or nothing
    Brad Falchuk    1   Bridesmaids
    Brian   Dan     1   All or nothing

我希望它能准确统计“Baz”出现在桌面上的次数(这应该针对每个名字进行)并且仅在count>的值时显示。例如,3。

2 个答案:

答案 0 :(得分:1)

按名称分组并使用count()

select name, count(*) as name_count
from your_table
group by name

count等汇总函数适用于每个

仅显示出现次数超过1次的名称

select name, count(*) as name_count
from your_table
group by name
having count(*) > 1

Having就像一个where子句,但适用于群组。

修改

select d.LastName, d.FirstName, count(f.Id_Director) as counter
from director d
inner join film f on f.Id_Director = d.id 
group by d.LastName, d.FirstName
having count(f.Id_Director) > 2

你也按电影分组了。那不行。你基本上要求的是那些超过一部电影 2倍的导演。

答案 1 :(得分:0)

问题是你是按电影分组的。因为有一个导演/电影病了,算作1。

您想要将电影名称保留在选择结果集中我建议您制作精选电影和子查询,以计算导演可以加入其他电影的次数。

刚刚在SQLFiddle上写了一个例子 Example