内部加入来自group by

时间:2015-01-20 21:10:40

标签: sql postgresql inner-join

我有一个包含国家/地区代码和名称的表countries

name            code
FRANCE          FR
JAPAN           JP

页面查看统计信息表views

page_id    code            date    etc...
34         FR              2015-01-01
34         FR              2015-01-02
34         JP              2015-01-02

我想输出显示该页面的所有国家/地区的列表,但是使用国家/地区名称,因此结果应该说明:FRANCE, JAPAN

我可以轻松获取其运行的国家/地区代码列表:

SELECT code FROM views WHERE page_id = 34 GROUP BY code;

但将它们映射到countries表中的名称是很难的。有什么想法吗?

我试过这个,但它不起作用:

SELECT
    countries.name as name_from_countries,
FROM
    countries
INNER JOIN name_from_countries ON countries.code = views.code
WHERE
    views.page_id = 34
GROUP BY
    views.code

2 个答案:

答案 0 :(得分:2)

这里不需要GROUP BY。只需使用DISTINCT。

SELECT DISTINCT countries.name as name_from_countries
FROM countries
INNER JOIN views ON countries.code = views.code
WHERE
    views.page_id = 34

答案 1 :(得分:1)

您需要将countries.name添加到GROUP BY - 我假设您在这里有一些汇总:

SELECT v.code, c.name AS name_from_countries
  FROM views v INNER JOIN countries c
    ON v.code = c.code
 WHERE v.page_id = 34
 GROUP BY v.code, c.name;

如果您没有任何汇总(例如COUNT(*)),那么您可以获得至少包含一个视图的国家/地区列表,如下所示:

SELECT c.code, c.name AS name_from_countries
  FROM countries c
 WHERE EXISTS ( SELECT 1 FROM views v
                 WHERE v.code = c.code
                   AND v.page_id = 34 );