這可以用group by
和count
select
user,page, count(*) as total
from table_name
group by user,page
having total > 2
UPDATE
輕鬆完成我怎麼能與這些結果更新另一個表?用戶 - 第 - 次
這可利用另外insert into select from
進行使用on duplicate key update
考慮以下
mysql> select * from pages ;
+------+------+
| user | page |
+------+------+
| 1 | p1 |
| 1 | p1 |
| 1 | p1 |
| 2 | p1 |
| 2 | p1 |
| 2 | p2 |
| 3 | p2 |
| 3 | p2 |
| 3 | p2 |
+------+------+
create table page_view_log
(
user int,
page varchar(100),
times int,
primary key(user,page)
);
select * from page_view_log ;
請注意,這裏的日誌表具有複合鍵(user,page)
現在以下查詢將完成作業
insert into page_view_log(user,page,times)
select
user,page,total from (
select user,page, count(*) as total
from pages
group by user,page
having total > 2
)x
on duplicate key update times = total
mysql> select * from page_view_log ;
+------+------+-------+
| user | page | times |
+------+------+-------+
| 1 | p1 | 3 |
| 3 | p2 | 3 |
+------+------+-------+
2 rows in set (0.00 sec)
現在,讓我們在第一表user-1
insert into pages values (1,'p1'),(2,'p2'),(2,'p2');
添加更多的頁面現在,如果我們再次運行上面的查詢,將更新全部現有數據和插入新值,重複使用複合考慮鍵(user,page)
mysql> select * from page_view_log ;
+------+------+-------+
| user | page | times |
+------+------+-------+
| 1 | p1 | 4 |
| 2 | p2 | 3 |
| 3 | p2 | 3 |
+------+------+-------+
謝謝。所以現在我們發現有兩次頁面訪問的用戶。我如何用這些結果更新另一個表?用戶 - 頁面 - 次 – poulokopri
更新或插入?第二張桌子是否已經擁有'user'和'page'以便它只會更新? –
第二個表格將有'user - page - times'列。它會像「插入,如果不存在,否則更新」。 – poulokopri