mysql - 三表查询,无公共(public)列

标签 mysql sql-server date join

我刚刚开始工作,我的老板希望我学习 mySQL,所以请耐心等待,我只学习了 2 天,而且还不太擅长。

所以我得到了 3 张 table 和几项任务要做。

表格是:

  1. mobile_log_messages_sms
  2. mobile_providers
  3. service_instances

在其中我必须:

  • 了解过去 25 天内有多少条消息以及如何 他们赚了很多钱
  • 然后我需要按天对它们进行分组(因此每天,排除小时数)并且 提供商名称。
  • 此外,我需要忽略所有包含空字符串的消息 在服务栏下
  • 此外,我需要忽略那些收入为 0 的消息,只计算在内 具有 service_enabled = 1 列的那些
  • 然后我需要按日期降序排序。

在表中 mobile_log_messages_sms:

  • message_id - 用于统计消息数量
  • 价格 - 明显用于价格,排除那些带有 0 的
  • 时间 - 日期,格式为 yyyy/mm/dd hh:mm:ss
  • 服务 - 排除所有具有空字符串(或 null)的服务

mobile_providers

  • provider_name - 用于分组

service_instances

  • 启用 - 仅当值为 1 时使用

我开始于:

SELECT message_id, price, time
FROM mobile_log_messages_sms
WHERE time BETWEEN '2017-02-26 00:00:00'
AND time AND '2017-03-22 00:00:00'

但是我需要更改日期格式,然后使用 JOIN 命令,但我不知道如何操作,而且我知道我需要添加更多内容,但即使在开始时我也感到困惑。另外,一开始只是列出了消息,但我需要计算每天的收入(价格)总和。

至少因为我还是个菜鸟,有人能指出我正确的方向吗?提前非常感谢,如果我措辞不好,很抱歉,英语不是我的母语。

最佳答案

了解过去 25 天内有多少条消息以及他们赚取了多少收入

1.

SELECT COUNT(message_id), SUM(price)
FROM mobile_log_messages_sms
WHERE CAST(time AS DATE) BETWEEN DATE_SUB(CURRENT_DATE,INTERVAL 25 DAY) 
AND CURRENT_DATE;

2.

SELECT COUNT(message_id), SUM(price)
FROM mobile_log_messages_sms
WHERE CAST(time AS DATE) BETWEEN DATE_SUB(CURRENT_DATE,INTERVAL 25 DAY) 
AND CURRENT_DATE
GROUP BY CAST(time AS DATE);

3.

SELECT COUNT(message_id), SUM(price)
FROM mobile_log_messages_sms
WHERE CAST(time AS DATE) BETWEEN DATE_SUB(CURRENT_DATE,INTERVAL 25 DAY) 
AND CURRENT_DATE AND service IS NULL
GROUP BY CAST(time AS DATE);

剩余不能通过连接完成,因此请确保表中至少有一列是通用的。

关于mysql - 三表查询,无公共(public)列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43401792/

相关文章:

php - 仅在一个 WHILE 循环结果上显示 div

sql - 在变量中捕获结果时可怕的 sql server 性能

c# - 如何在sql数据库后端插入2个值的总和

sql-server - SQL Server 创建用户后无法登录

java - 在 IReport 中显示为 oracle.sql 的日期

ios - 按键中的字符串日期对 NSDictionaries 的 NSArray 进行排序?

mysql - 通过多字段索引查询性能排序 yield

php - 在最后两个数据库之间添加 "and"导致 foreach 循环

php - 是否可以从独立的rest api请求(到php服务器)收集mysql查询并运行组合插入或更新?

mysql - 获取两个日期之间的日期列表