【问题标题】:Count nested select using join and by month使用连接和按月计算嵌套选择
【发布时间】:2021-03-10 04:44:56
【问题描述】:

您好,我有三张桌子 第一的。 count_internets

id| company_id | item_id | created_at
1 | 1          |    1    | 2020-10-14 |
2 | 1          |    2    | 2020-10-15 |
3 | 2          |    4    | 2020-10-16 |
4 | 2          |    5    | 2020-11-20 |
5 | 1          |    1    | 2020-11-22 |
6 | 1          |    1    | 2020-11-23 |
7 | 2          |    5    | 2020-11-23 |

第二个公司

id | name
1  | Company 1
2  | Company 2

第三个项目

id  | name      | company_id
1   | Product 1 |    1
2   | Product 2 |    1
3   | Product 4 |    2
4   | Product 5 |    5

我想了解在一个月内按公司分组销售了多少商品,如下所示

| Company   | Products  | Month | Count 
| Company 1 | Product 1 | OCT   | 1
| Company 1 | Product 2 | OCT   | 1
| Company 1 | Product 1 | NOV   | 1
| Company 1 | Product 4 | OCT   | 1
| Company 2 | Product 5 | NOV   | 2

我尝试了许多 SQL 查询,但我无法解决。请帮忙解决这个问题。

【问题讨论】:

  • 是的 MySQL,created_at = datetime,我只插入了日期文本

标签: mysql sql date join count


【解决方案1】:

这个应该可以的

SELECT c.name as company, i.name as products, EXTRACT(MONTH FROM FROM_UNIXTIME(created_at)) as month, count(*)
FROM count_internets
JOIN companies as c on company_id = c.id
JOIN items as i on item_id = i.id
GROUP BY company, products, month

请注意,如果该查询仅提取月份(因此年份之间没有差异)。如果你也需要年份,你必须提取它EXTRACT(YEAR FROM FROM_UNIXTIME(created_at)) as year

但是你的例子不是很清楚,公司 1 没有销售产品 3。另外,items 表中的 company_id 是什么意思?

【讨论】:

  • 关于产品 3. 桌子上没有这个产品。这只是一个例子。 items 表中的 company_id 字段表示该产品属于具有 id 的公司。
  • created_at 是时间戳还是日期?如果是日期,可以使用 EXTRACT 或 MONTH(my_field) 如果是时间戳,则必须将其转换为 FROM_UNIXTIME(created_at) 之类的日期
猜你喜欢
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多