我在为客户动态开发一些查询时遇到困难,有时会问自己“从我正在寻找的数据子集开始,然后导入到 Excel 等程序中会更好吗?”并使用类似的功能(例如数据透视表)相应地处理数据?。
我遇到的一个特别困难的例子是以下示例:
我有一个在线成员(member)注册系统。为了简单起见,我们假设捕获的数据是:成员(member) ID、注册日期、推荐代码、状态。
示例成员表可能如下所示:
MemberID | Date | Ref | USState
=====================================
1 | 2011-01-01 | abc | AL
2 | 2011-01-02 | bcd | AR
3 | 2011-01-03 | cde | CA
4 | 2011-02-01 | abc | TX
等等......
最终,我想要使用此数据集构建和运行的查询类型可以扩展到: “在单个结果集中显示所有推荐代码及其每月注册数量的列表”。
例如:
Ref | 2011-01 | 2011-02 | 2011-03 | 2011-04
==============================================
abc | 1 | 1 | 0 | 0
bcd | 1 | 0 | 0 | 0
cde | 1 | 0 | 0 | 0
说实话,我不知道如何在 MySQL 中构建这种类型的查询(我想如果能做到的话,将需要大量代码、连接、子查询和联合。
类似地,另一个示例查询可能是每个州每月有多少成员(member)注册
USState | 2011-01 | 2011-02 | 2011-03 | 2011-04
==============================================
AL | 1 | 0 | 0 | 0
AR | 1 | 0 | 0 | 0
CA | 1 | 0 | 0 | 0
TX | 0 | 1 | 0 | 0
我想我的问题有两个:
1) 事实上,最好是尝试使用 MySQL GUI(例如 Navicat)中的必要数据来构建这些数据,还是将整个数据子集导入 Excel 中并继续工作?
2) 如果我要使用 MySQL 路由,在下面提到的示例中构建数据子集的正确方法是什么(请注意,查询可能会变得更加复杂,例如“显示有多少注册进来对于每个州的每个特定月份,并按每个代理进行分组(每个代理有 50 个可能的行)”
非常感谢您提前提供的帮助。
最佳答案
我支持在服务器端进行这种查询,至少是为了获取您需要的数据。
您应该创建一个时间段表。它可以变得像您想要的那样复杂,甚至可以缩短到几天。
id year month monthstart monthend
1 2011 1 1/1/2011 1/31/2011
...
这为您提供了几乎无限的能力,以各种有趣的方式对数据进行分组和查询。
按您提到的月份查询获取原始推荐计数的数据将非常简单......
select a.Ref, b.year, b.month, count(*) as referralcount
from myTable a
join months b on a.Date between b.monthstart and b.monthend
group by a.Ref, b.year, b.month
order by a.Ref, b.year, b.month
结果集将位于诸如 ref = abc,year = 2011,month = 1,referralcount = 1
的行中,而不是每个月的列。我假设由于可以选择获取更大的数据集并在 Excel 中对其进行操作,因此更改此数据的布局并不困难。
查看之前的答案,该答案通过不同的示例更详细地介绍了该概念:SQL query for Figuring counts by month
关于mysql - 最好构建 SQL 查询或使用其他程序进行推断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6282227/