如何通过子选择进行计数

时间:2012-07-27 20:25:22

标签: sql

我正在尝试编写一个SQL,它获取表中与特定列具有相同值的行数。 在这种情况下,该表有一个名为“title”的列。对于我返回的每一行,以及该行的其他列的值,我想获得表中与该行的'title'值具有相同值的行数。 目前,我所拥有的最好的是: 选择名字,姓氏,城市,州,标题,(从myTable中选择count = title的数量);

显然,所有这些都是我子选择表中的行数。 如何获得标题的右侧=引用列标题的值?

感谢任何人的帮助。

3 个答案:

答案 0 :(得分:2)

这称为“相关子查询”。它是这样的:

select firstname, lastname, title, 
              (select count(1) from table where title=a.title) title_count 
from table a;

答案 1 :(得分:1)

这未经过测试,但我认为它应该适用于你想要做的事情

WITH titles AS (
    SELECT
        Title
        , COUNT(*) AS Occurences
    FROM myTable
    GROUP BY Title
)
SELECT 
    t1.FirstName
    , t1.LastName
    , t1.City
    , t1.state
    , t1.title
    , titles.Occurences
FROM myTable AS t1
INNER JOIN titles ON t1.Title = titles.Title

答案 2 :(得分:1)

大多数数据库都支持窗口/分析功能。如果您使用其中一个(例如SQL Server,Oracle,Postgres),您可以这样做:

select t.firstname, t.lastname, t.title, t.city, t.state,
       count(*) over (partition by title) as numwithtitle
from t