【发布时间】:2014-02-12 16:22:13
【问题描述】:
我有这种关系; 国家(名称、代码、首都、省、地区、人口)
我想从哪里获取语言(名称)、使用它们的国家/地区数量以及每种语言的母语使用者数量。
我很确定我几乎完成了这个,但我认为我没有掌握“ORDER BY”的真正用途,因为我对 count(l.name) 的计算得到了凌乱,只有当我确定该数据库包含在多个国家/地区使用某种语言的信息时才获得值“1”!
SELECT DISTINCT l.name, count(l.name) as SpokenIn,
l.percentage*c.population as NativeSpeakers
FROM (country c
JOIN language l
ON c.code = l.country)
GROUP BY l.name, NativeSpeakers;
所有其他行都很好,只有“SpokenIn”关系很乱。我做错了什么:(
我正在使用 PostgreSQL。
【问题讨论】:
-
嗯,首先,您确实不需要 DISTINCT 限定符,因为您的 group by 子句指定了您希望计数所基于的字段。您将获得“1”作为计数,因为 DISTINCT 最终会为每个结果提供一行。其次,您似乎正在尝试按国家/地区进行百分比计算,但尝试对整个语言进行计数...
-
使用
SUM代替COUNT对1.name有效吗? -
这个查询中的
ORDER BY在哪里,你的意思是GROUP BY吗? -
最好创建一个 SQLFIDDLE,以便轻松验证答案。
标签: sql database function postgresql