Sql server 2008 sql server统计数据查询
我有一个包含以下列的表Sql server 2008 sql server统计数据查询,sql-server-2008,aggregate,Sql Server 2008,Aggregate,我有一个包含以下列的表 source_title, country, language, source_url 我需要生成一个查询,该查询将为我提供以下信息: country, source_title count, percentage of sources 及 基本上将国家映射到所有来源,并获得该映射的计数和百分比 不是像这样的行级数据 SELECT [source_id] ,[source_title] ,[source_url] ,[moreover] ,[count
source_title, country, language, source_url
我需要生成一个查询,该查询将为我提供以下信息:
country, source_title count, percentage of sources
及
基本上将国家映射到所有来源,并获得该映射的计数和百分比
不是像这样的行级数据
SELECT [source_id]
,[source_title]
,[source_url]
,[moreover]
,[country]
,[lang]
FROM [NewsDatabase].[dbo].[NewsSourcesMatch]
order by country
例如,如果有10个国家为美国的记录,则
country count(source_title) % source_title
USA 10 10/1000 * 100
对不起,这里的每个人都是样本数据
source\u title source\u url\u country lang
哈德兰挪威哈德兰挪威
美国商务英语
阿德莱德现在阿德莱德现在澳大利亚英语
MSNBC本地MSNBC本地美国英语
UDN.com UDN.com台湾华人
CBS3费城CBS3费城美国英语
104.7 Edge电台104.7 Edge电台美国英语
那么有四个来自美国,那么总的百分比不应该是4/7*100吗
;WITH T AS
(
SELECT [Country]
, Totals = COUNT(*)
FROM [dbo].[NewsSourcesMatch]
GROUP BY [Country]
)
SELECT [Country]
, [source_title]
, [source_title_count] = COUNT([source_title])
, [source_title_pct] = COUNT([source_title])/t.Totals
FROM [dbo].[NewsSourcesMatch] A
INNER JOIN
T t
ON A.country = t.Country
GROUP BY A.[Country], [source_title]
同样,对于
lang
,您可以使用OVER子句跨越整个数据集,并使用COUNT给出同一查询中的行总数。然后您有两个计数(每个国家和所有行)来生成%
应该是这样的:
SELECT [Country]
, [source_title_count] = COUNT(*)
, [source_total_count] = COUNT(*) OVER ()
, [source_percent] = 100.0 * COUNT(*) / COUNT(*) OVER ()
FROM [dbo].[NewsSourcesMatch]
GROUP BY [Country]
SELECT [lang]
, [source_title_count] = COUNT(*)
, [source_total_count] = COUNT(*) OVER ()
, [source_percent] = 100.0 * COUNT(*) / COUNT(*) OVER ()
FROM [dbo].[NewsSourcesMatch]
GROUP BY [lang]
如果没有,请添加样本数据和所需输出
还是这个
SELECT [Country]
, COUNT(DISTINCT [source_title)) AS source_title_count
, COUNT(*) source_country_count
, 100.0 * COUNT(*) / COUNT(DISTINCT [source_title)) source_country_count
FROM [dbo].[NewsSourcesMatch]
GROUP BY [Country]
无法对此进行测试(此电脑上没有SQL),但基于
您所说的
来源和语言的百分比
和来源的百分比
是什么意思?你能提供一些样本数据和期望的输出吗?在1000个条目中,与特定国家相匹配的源的百分比10与美国相匹配,以澄清:每个国家的源标题计数,以及该计数占所有行的百分比。语言也一样?哦,我很感谢你的回答,但不完全是这样…我想要以下内容:美国5/1000@vbNewbie,1000代表美国或世界的总计吗?国家/地区在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中。我缺少GROUP BY。。。请立即尝试。不明确的列名“country”。Msg 209,16级,状态1,第9行感谢您的回复。一个问题是,源总计数不应该是表中的总记录,或者是如何计算的。其他一切都是正确的COUNT(*)over()只提供数据集中的行数,否?是的,但表中的总记录数为32000,每个国家的源总计数为204@vbNewbie:请参阅我的最后一行:使用示例数据更清楚地定义您想要的内容。表面上看,你要求的是一个相互矛盾的计数。谢谢你的耐心,终于用over子句找到了正确的组合。祝福你的帮助
SELECT [Country]
, COUNT(DISTINCT [source_title)) AS source_title_count
, COUNT(*) source_country_count
, 100.0 * COUNT(*) / COUNT(DISTINCT [source_title)) source_country_count
FROM [dbo].[NewsSourcesMatch]
GROUP BY [Country]
SELECT [Country]
, [source_title_count] = COUNT(*)
--attempt 1
, [source_total_count] = COUNT(*) OVER (Country)
, [source_percent] = 100.0 * COUNT(*) / COUNT(*) OVER (Country)
--attempt 2
, [source_total_count] = COUNT(*) OVER (PARTITION BY Country)
, [source_percent] = 100.0 * COUNT(*) / COUNT(*) OVER (PARTITION BY Country)
FROM [dbo].[NewsSourcesMatch]
GROUP BY [Country]