我刚刚开始工作,我的老板希望我学习 mySQL,所以请耐心等待,我只学习了 2 天,而且还不太擅长。
所以我得到了 3 张 table 和几项任务要做。
表格是:
- mobile_log_messages_sms
- mobile_providers
- 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/