MySQL分组两次

时间:2014-10-17 03:45:38

标签: mysql

我有一个数据库结构:

ip | yid |日期

其中ip代表用户的IP,yid是特定的网页ID。我尝试按ipyid列进行分组,我在下面进行了分析。但是我需要按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组合。

2 个答案:

答案 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,则可以省略该表达式。