编辑
2023-10-10
mysql
00
请注意,本文编写于 578 天前,最后修改于 578 天前,其中某些信息可能已经过时。

目录

总结一
总结二

image.png

image.png

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可以用于在SELECT语句中去除重复的行,而GROUP BY可以用于对数据进行分组并进行聚合计算。
  • DISTINCT会对SELECT语句中所有的列进行去重,而GROUP BY只会对指定的列进行分组。
  • DISTINCT返回的结果集是去重后的行,而GROUP BY返回的结果集是按照指定的列进行分组后的聚合结果。
  • DISTINCT可以用于单个列或多个列,而GROUP BY只能用于多个列。
  • DISTINCT不会改变查询结果的排序,而GROUP BY会按照指定的列进行排序。
  • DISTINCT可以用于子查询,而GROUP BY不支持子查询。

总的来说,DISTINCT适用于去重,而GROUP BY适用于分组并进行聚合计算。根据具体的需求选择使用哪种语句。

image.png

image.png

sql
CREATE 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 许可协议。转载请注明出处!