我试图得到每个设备每天的平均事件数。我已经让它大部分工作了,但不能让一组一组的设备吐出所有的设备。
数据如下:

 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只在完整分组中运行,但是从@paulspiegel的评论来看,似乎是因为你只在日期上分组,而且你的mysql不是“唯一完整分组”模式,那么mysql只是抛出了你所有不同的设备信息,以便让查询成功。我假设mysql在概念上重写了您的查询,这样它就不再是内部的select device, count..
我强烈建议您激活“仅完整分组方式”模式,这将要求您使用分组方式中的设备,因为您已经在选择列表中使用了它
另外,我还提供以下优化:
希望每个设备(select max(device), count ...)的事件总数(COUNT(*))除以设备引发事件的不同天数(GROUP BY device)的总数。桌面在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;

我做了一把小提琴来演示:
模式(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/

10-16 13:25