我有一个数据库结构:
ip | yid |日期
其中ip
代表用户的IP,yid
是特定的网页ID。我尝试按ip
和yid
列进行分组,我在下面进行了分析。但是我需要按yid
对这些结果进行分组。所以它将它分组为:
其中count是页面被调用的次数,限制每个ip地址1个呼叫。
现在我有:
SELECT `ip`, `yid`, `time`, MAX(`time`), count(*)
FROM mp_downloads
GROUP BY CONCAT(`ip`, `yid`), `yid`
ORDER BY count(*) DESC
但是,它不是按照不同的yid
&组合对页面ID进行分组后对其进行分组。 ip
组合。
答案 0 :(得分:1)
使用嵌套查询尝试此操作:
select temp.*, count(*) from
(SELECT `ip`, `yid`, `time`, MAX(`time`)
FROM mp_downloads
GROUP BY CONCAT(`ip`, `yid`))temp group by temp.yid;
答案 1 :(得分:0)
获取访问过(yid
)的IP地址计数的规范模式是:
SELECT d.yid
, COUNT(DISTINCT d.ip) AS ip_count
, MAX(d.date) AS latest_time
FROM mp_downloads d
GROUP BY d.yid
为了获得最佳性能,您需要一个合适的索引,例如
... ON mp_downloads (yid, ip, date)
不需要按连接两列的表达式进行分组。不需要派生表(内联视图)或子查询。如果您不需要latest_time,则可以省略该表达式。