SQL,如何计算范围内的行数

时间:2012-12-25 11:23:45

标签: mysql sql select

我有两张桌子:

一个是a_tbl(uid, login_ip, login_time);

这里ip是32位整数,time是unix时间戳。

另一个是b_tbl(country, province, city, ip_from, ip_to)

我想知道b_tbl中的每个范围都包含a_tbl中的唯一uid数。

请注意b_tbl有很多独特的行,a_tbl可能存在dunplicated uid。

非常感谢。

3 个答案:

答案 0 :(得分:2)

要实现这一点,您可以使用BETWEEN作为其谓词来编写JOIN。那会发展范围;然后,只计算每个范围内的物品。这样的事情应该让你开始:

SELECT b_tbl.ip_From, b_tbl.ip_to, COUNT(a_tbl.login_ip)
  FROM a_tbl
  JOIN b_tbl ON a_tbl.login_ip BETWEEN b_tbl.ipfrom AND b_tbl.ip_to
GROUP BY  b_tbl.ip_From, b_tbl.ip_to;

答案 1 :(得分:1)

试试这个:

SELECT ip_from
    , ip_to
    , COUNT(distinct uid) as NumberOfUniqueUserId
FROM a_tbl
INNER JOIN b_tbl on login_ip BETWEEN ip_from AND ip_to
GROUP BY ip_from
    , ip_to

答案 2 :(得分:0)

SELECT city, count(uid)
FROM (
  SELECT DISTINCT A.uid, B.city
  FROM a_tbl A 
       LEFT JOIN b_tbl B 
                 ON A.login_ip >= B.ip_from AND A.login_ip <= B.ip_to
)
GROUP BY city
相关问题