我想对计数的分组结果进行 SQL 查询。我能够做到这一点的唯一方法是在 PHP 的帮助下。但我确信可以通过一条 SQL 语句来完成此操作。
该表的结构如下:
id
、user_hash
、时间戳
我的 PHP 小解决方法如下所示:
$sql = 'SELECT count(id) AS \'total clicks\' FROM stats WHERE timestamp > UNIX_TIMESTAMP(NOW() - INTERVAL '.$num_days.' DAY) GROUP BY user_hash ORDER BY count(id) DESC';
$result = $mysqli->query($sql);
$count = array();
while ($row = mysqli_fetch_assoc($result)) {
if (isset($count[$row['total clicks']])) {
$count[$row['total clicks']]++;
} else {
$count[$row['total clicks']] = 1;
}
}
foreach ($count as $k => $v) {
echo $v." users clicked ".$k." times\n";
}
我可能会惊叹它是多么容易,但我似乎无法获得一个一体化的 SQL 解决方案。 :)
最佳答案
请尝试:
$sql = 'SELECT
A.`user_times_clicked`,
COUNT(A.user_hash) AS `user_count`
FROM(
SELECT
count(id) AS `user_times_clicked`,
user_hash
FROM
stats
WHERE
timestamp > UNIX_TIMESTAMP(NOW() - INTERVAL '.$num_days.' DAY)
GROUP BY
user_hash
) AS A
GROUP BY
A.`user_times_clicked`
ORDER BY
COUNT(A.user_hash) DESC'
希望对您有所帮助。
关于php - 避免使用双 GROUP BY sql 语句的 PHP 解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27873925/