php - MySQL 子查询/关联查询

标签 php mysql subquery correlated-subquery

我正在构建一个用户统计信息页面并尝试正确显示统计信息,并且希望获得一些帮助。

我有一个网站,为注册用户提供可下载文件,我想跟踪下载情况、每个用户下载该文件的次数以及他们下载的独特产品的数量。

表:customer_statistics

| user |  product_id  |  file_download  |  date_accessed   |
------------------------------------------------------------
| tom  |  1104        |  mp3       |  2017-05-06 00:00:00  |
| tom  |  1048        |  video     |  2017-05-06 00:00:00  |
| tom  |  1048        |  video     |  2017-05-06 00:00:00  |
| tom  |  1048        |  video     |  2017-05-07 00:00:00  |
| tom  |  1048        |  video     |  2017-05-08 00:00:00  |
| tom  |  1010        |  video     |  2017-05-08 00:00:00  |
| tom  |  1077        |  video     |  2017-05-08 00:00:00  |
| sue  |  1749        |  photo     |  2017-05-09 00:00:00  |
| sue  |  1284        |  video     |  2017-05-09 00:00:00  |
| sue  |  1284        |  video     |  2017-05-09 00:00:00  |
| sue  |  1065        |  mp3       |  2017-05-09 00:00:00  |
| sue  |  1344        |  video     |  2017-05-10 00:00:00  |
| sue  |  2504        |  photo     |  2017-05-10 00:00:00  |

我想这样显示数据:

Name | Unique Mp3s | Unique Photos | Unique Videos | Total
----------------------------------------------------------
Tom  |    1        |    0          |    3          |  7
Sue  |    1        |    2          |    2          |  6

unique mp3s/photos/video显示每种文件类型已下载了多少个唯一product_id,而total则显示总数为该特定用户添加的所有文件类型和出现次数的总和。

实现上述结果的最佳方法是什么?

提前致谢!

最佳答案

我会这样做,不需要子查询:

SELECT user AS `Name`,
  COUNT(DISTINCT CASE file_download WHEN 'mp3' THEN product_id END) AS `Unique Mp3s`
  COUNT(DISTINCT CASE file_download WHEN 'photo' THEN product_id END) AS `Unique Photos`
  COUNT(DISTINCT CASE file_download WHEN 'video' THEN product_id END) AS `Unique Videos`
  COUNT(DISTINCT product_id) AS `Total`
FROM customer_statistics
GROUP BY user;

关于php - MySQL 子查询/关联查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43947401/

相关文章:

sql - Postgres : Simplify SQL query to get rid of subselects

mysql - 使用 stddev 优化外汇数据历史记录的子查询

php - 用户名必须存在于数据库中才能创建登录

javascript - 将两个相互关联的菜单从静态转换为动态

mysql - sqlite 转储 ms access - 这可以更改吗?

php - PHP 中的 JavaScript 无法正常工作(document.getElementById)

mysql - Mysql 查询中 Sum 的平均值

php - <select> 下拉默认值

php paypal sdk安装

PHP file_get_contents() 在 PLESK/CENTOS7 服务器上不起作用