sql
CREATE TABLE Activity (
user_id INT,
session_id INT,
activity_date DATE,
activity_type ENUM('open_session', 'end_session', 'scroll_down', 'send_message')
);
INSERT INTO Activity (user_id, session_id, activity_date, activity_type) VALUES
(1, 1, '2019-07-20', 'open_session'),
(1, 1, '2019-07-20', 'scroll_down'),
(1, 1, '2019-07-20', 'end_session'),
(2, 4, '2019-07-20', 'open_session'),
(2, 4, '2019-07-21', 'send_message'),
(2, 4, '2019-07-21', 'end_session'),
(3, 2, '2019-07-21', 'open_session'),
(3, 2, '2019-07-21', 'send_message'),
(3, 2, '2019-07-21', 'end_session'),
(4, 3, '2019-06-25', 'open_session'),
(4, 3, '2019-06-25', 'end_session');
SELECT activity_date AS day, COUNT(DISTINCT user_id) AS active_users
FROM Activity
WHERE activity_date >= DATE_SUB('2019-07-27', INTERVAL 30 DAY)
GROUP BY activity_date;
DISTINCT和GROUP BY都是用于对数据进行分组或去重的SQL语句。
共同点:
区别:
总的来说,DISTINCT适用于去重,而GROUP BY适用于分组并进行聚合计算。根据具体的需求选择使用哪种语句。
sqlCREATE TABLE RequestAccepted (
requester_id INT,
accepter_id INT,
accept_date DATE,
PRIMARY KEY (requester_id, accepter_id)
);
INSERT INTO RequestAccepted (requester_id, accepter_id, accept_date) VALUES
(1, 2, '2016-06-03'),
(1, 3, '2016-06-08'),
(2, 3, '2016-06-08'),
(3, 4, '2016-06-09');
SELECT id, COUNT(id) AS num
FROM (
SELECT requester_id AS id
FROM RequestAccepted
UNION ALL
SELECT accepter_id AS id
FROM RequestAccepted
) AS ids
GROUP BY id
ORDER BY num DESC
LIMIT 1;
SELECT requester_id AS id
FROM RequestAccepted
UNION ALL
SELECT accepter_id AS id
FROM RequestAccepted
UNION ALL是一条将两个查询结果合并为一个结果集的SQL语句。它与UNION的区别在于,UNION会将重复的记录去除,而UNION ALL会保留重复的记录。在这个语句中,我们需要保留重复的记录,因为好友关系是相互的,所以需要同时统计requester_id和accepter_id。
本文作者:yowayimono
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!