mysql - 最好构建 SQL 查询或使用其他程序进行推断?

标签 mysql excel join subquery pivot-table

我在为客户动态开发一些查询时遇到困难,有时会问自己“从我正在寻找的数据子集开始,然后导入到 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/

相关文章:

oracle - 跟踪 Oracle 表之间的路径?

MySql复杂连接性能问题

c# - Excel._Worksheet.Columns.Autofit() 方法挂起

vba - 将列从一个 Excel 工作表复制到另一个 Excel 工作表

mysql - 如何编写需要翻译两列的 SQL 查询?

mysql - 如何加入 MySQL 查询

Mysql搜索和替换

mysql - 使用一些行值作为列 SQL

mysql - 优化SQL以获取1天的数据

excel - 过滤数据透视表列,仅在以下情况下计数