gpt4 book ai didi

mysql - SQL - 按设备类型获取平均计数

转载 作者:可可西里 更新时间:2023-11-01 07:38:14 26 4
gpt4 key购买 nike

我正在尝试获取每台设备每天的平均事件数。我大部分时间都在使用它,但无法让 GROUP BY 设备吐出所有设备。

数据看起来像这样:

 user_id    device  attribution event_date
1 Desktop Organic 2019-09-02 16:21:44
2 Mobile Organic 2019-09-03 16:22:25
3 Desktop Direct 2019-09-04 16:22:27
4 Tablet Organic 2019-09-04 16:22:29
5 Desktop Email 2019-09-04 16:22:31
6 Desktop Email 2019-09-04 16:25:59
7 Desktop Organic 2019-09-05 16:21:44

SELECT dt.device AS AcquisitionType, AVG(dt.events) AS AverageEvents
FROM ( SELECT u.device,
COUNT (u.event_date) AS events
FROM users AS u
GROUP BY DATE(event_date)
) AS dt
GROUP BY dt.device
;

没有收到任何错误。一切正常,只是我无法获得按设备分组的结果。

最佳答案

我实际上找不到您的查询有任何问题,一旦我在内部查询中添加了 GROUP BY u.device,DATE(event_date) 因为我的 MySQL 在 only_full_group_by 中运行,但是从@PaulSpiegel 的评论看来,因为你只按日期分组,而你的 mysql不是“仅完全分组依据”模式,然后 mysql 只是抛出所有不同的设备信息以使查询成功。我想从概念上讲,mysql 重写了您的查询,因此内部的 select device, count.. 更像是 select max(device), count ...

我强烈建议您激活“仅完整分组依据”模式,这将要求您在分组依据中使用设备,因为您在选择列表中使用了它

顺便说一句,我提供了这个优化:

您希望每个设备 (GROUP BY device) 的事件总数 (COUNT(*)) 除以不同天数的总数 (COUNT (DISTINCT DATE(u.event_date))) 设备一直在引发事件。桌面版在 3 个不同的日子里有 5 个事件,因此预计约为 1.667。其他两个每天一个:

SELECT 
u.device AS AcquisitionType,
COUNT(*)/COUNT(DISTINCT DATE(u.event_date)) AS AverageEvents
FROM users u
GROUP BY u.device;

我做了这个 fiddle 来演示:

模式(MySQL v5.7)

CREATE TABLE users (
`user_id` INTEGER,
`device` VARCHAR(15),
`sc` VARCHAR(15),
`event_date` timestamp
);

INSERT INTO users
(`user_id`, `device`, `sc`, `event_date`)
VALUES
('1', 'Desktop','Organic', '2019-09-02 16:21:44'),
('2', 'Mobile', 'Organic','2019-09-03 16:22:25'),
('3', 'Desktop','Direct', '2019-09-04 16:22:27'),
('4', 'Tablet', 'Organic','2019-09-04 16:22:29'),
('5', 'Desktop','Email', '2019-09-04 16:22:31'),
('6', 'Desktop','Email', '2019-09-04 16:25:59'),
('7', 'Desktop','Organic', '2019-09-05 16:21:44');

查询#1

    SELECT 
u.device AS AcquisitionType,
COUNT(*)/COUNT(DISTINCT DATE(u.event_date)) AS AverageEvents
FROM users u
GROUP BY u.device;

| AcquisitionType | AverageEvents |
| --------------- | ------------- |
| Desktop | 1.6667 |
| Mobile | 1 |
| Tablet | 1 |

View on DB Fiddle

关于mysql - SQL - 按设备类型获取平均计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57810024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com