【发布时间】:2012-01-20 17:57:21
【问题描述】:
我正在尝试使用 Mongo 进行一些测试,我发现了一些与 Mongo 等效的更简单的 MySQL 查询。
我有一个更复杂的查询,我需要帮助...
SELECT DISTINCT dims_user,
COUNT(DISTINCT asset_name) AS asset_count,
COUNT(DISTINCT system_name) AS station_count,
SUM(CASE WHEN details ='viewed' then 1 Else 0 end) AS viewed_count,
SUM(CASE WHEN details Like 'Viewed Web%' then 1 Else 0 end) AS Web_count,
SUM(CASE WHEN details = 'ThumbView' then 1 Else 0 end) AS ThumbView_count,
SUM(CASE WHEN details Like 'Exported%' then 1 Else 0 end) AS Exported_count,
SUM(CASE WHEN details Like '%Print%' then 1 Else 0 end) AS Printed_count
FROM asset_log GROUP BY dims_user;
【问题讨论】:
-
呃...这不是很好的关系实践...
details列中的数据应该被规范化 - NoSQL 数据库设计也是如此,column:action =(view|web| thumb|export|print),然后您只需按操作切换到一个组。 -
它是一堆日志文件,我刚刚得到了 3200 万条记录
-
然后ETL它一次(如果它是静态的 - 或者建立一个用于重复加载的加载/转换过程),以便它被规范化。它将大大简化您尝试做的事情。
-
除非您预处理数据以允许简单查询,否则您可能必须使用 map reduce(求和、计数、分组)来完成此操作