我有两张桌子:
一个是a_tbl(uid, login_ip, login_time);
这里 ip 是一个 32 位整数,time 是 unix 时间戳。
另一个是b_tbl(country, province, city, ip_from, ip_to)
我想找出每个范围b_tbl
在a_tbl
.
请注意,b_tbl
它有很多独特的行,并且a_tbl
可能存在重复的 uid。
非常感谢。
要实现这一点,您可以使用 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;
尝试这个:
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
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