选择distinct column_a并按column_b分组

时间:2014-07-30 02:23:14

标签: mysql sql

我有一个包含这两列的表:

ip    country

这些是我在我网站上的观众。我正在尝试查看从每个国家/地区获得的唯一 IP数量。

我想出了这个:

SELECT DISTINCT ip, country, count(*) as views FROM views GROUP BY country

我希望这会选择不同IP的数量以及他们按国家/地区分组的国家/地区。然后我会有一个列views来保持计数。

这不起作用,此查询返回按国家/地区分组的行总数。无论是否有DISTINCT ip,我都会得到相同的结果。

编辑:我没有表达清楚,我想弄清楚的是每个国家有多少独特的IP

我的一些IP在数据库中是重复的,相同的IP出现3-4次。我想忽略这一点:

输入样本:

**ip**    **country**
1.1.1.1       USA
1.1.1.1       USA
1.1.1.1       USA
1.1.1.1       USA
1.1.1.2       USA
1.1.1.2       USA
1.1.1.2       USA
1.1.1.3       GER
1.1.1.3       GER
1.1.1.5       GER

应输出:

USA -> 2
GER -> 2

即:来自美国的两种不同的IP和来自德国的两种不同的IP。

2 个答案:

答案 0 :(得分:2)

试试这个:

SELECT
    country,
    count(DISTINCT ip) views
FROM views
GROUP BY country
ORDER BY country;

答案 1 :(得分:1)

来自@Joseph B SQL的小改动

Select country, views
FROM (SELECT count(DISTINCT ip) views,
             country 
      FROM views
      GROUP BY country
      ORDER BY country);