3

私は2つのテーブルを持っています:

一つはa_tbl(uid, login_ip, login_time);

ここで、ip は 32 ビット整数、time は UNIX タイムスタンプです。

もう一つはb_tbl(country, province, city, ip_from, ip_to)

b_tblの各範囲に一意の uid がいくつあるかを調べたいと思いますa_tbl

b_tbl多くの一意の行があり、複製されてa_tblいない uid が存在する可能性があることに注意してください。

どうもありがとうございました。

4

3 に答える 3

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;
于 2012-12-25T11:33:34.407 に答える
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
于 2012-12-25T11:37:21.177 に答える
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
于 2012-12-25T11:38:03.573 に答える