直接从Mysql查询数据生成报告(使用groupby、count)

Posted

技术标签:

【中文标题】直接从Mysql查询数据生成报告(使用groupby、count)【英文标题】:Generating report directly from Mysql Query data (using groupby, count) 【发布时间】:2015-08-08 14:13:21 【问题描述】:

我有两个表用于存储图像及其相关的 exif 数据:

image_table 有如下记录:

(query: select * from image_table where order_id = 3030303)

image_exif_info 表有如下记录:

(query: select * from image_exif_info where 
image_id in (select image_id from image_table where order_id = 3030303)

如第二个屏幕截图所示,我对MakeModel 字段感兴趣。

我想做的是编写一个查询,它将向我显示这样的数据(报告):

Make          Model              # of photos
Canon         CanonEOS 400D      (200)
Nikon         Nikon D3200        (120)
....          .....              ....

我知道我可以编写一个查询并循环遍历并进行计数等来获取此报告。但是,我正在努力提高我的 SQL 技能,因此我尝试使用单个查询来创建此报告。

到目前为止,我已经做到了这一点:

select distinct i.value,count(i.image_id) from image_exif_info i 
where (i.key ='Make' or i.key = 'Model')
and i.image_id in (select image_id from image where order_id =303030)
group by value

上面查询的结果是:

Canon                 200
CanonEOS 400D         200
Nikon                 120
Nikon D3200           120

我希望它与我在上面 (REPORT) 下显示的内容相同

【问题讨论】:

鉴于您可以访问应用程序级代码,我很想在那里解决这个问题的“显示”部分,而不是使用数据透视查询。 【参考方案1】:

这是使用表子查询的一种方法。

SELECT exif.Make, exif.Model, COUNT(i.image_id) AS "# of photos"
FROM image_table i
INNER JOIN (SELECT x.image_id, 
       MAX(CASE WHEN x.`key`='Make' THEN x.`value` ELSE '' END) AS Make,
       MAX(CASE WHEN x.`key`='Model' THEN x.`value` ELSE '' END) AS Model
      FROM image_exif_info x
      WHERE x.`key` IN ('Make','Model')
      GROUP BY x.image_id) exif
ON i.image_id = exif.image_id
GROUP BY exif.Make, exif.Model;

SQLFiddle:http://sqlfiddle.com/#!9/38dc4/11

子查询是提供每个 image_id 以及品牌和型号的枢轴。然后通过 image_id 将其连接到 image_table 并按品牌和型号分组。

【讨论】:

那,先生,太棒了!我希望我能不止一次 +1!非常感谢!!

以上是关于直接从Mysql查询数据生成报告(使用groupby、count)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL各部分的执行顺序

Linux平台生成awr报告

使用来自企业应用程序的 PHP 从 MySQL 数据生成大型 Excel 文件

从逗号分隔的 JSON mysql 字段查询报告

生成包含多个表/查询的 MS Access 报告

使用 Cloud SQL MySQL 的 Google Data Studio 报告只允许一个表