我正在学习如何在 MySQL
中编写查询,我有一个包含事务的表并且想要得到总计 1。在整个生命周期内销售的收入
,2。一天的收入
,3。一周的收入
和 4。一个月的收入
。所有这些都返回具有相同列的表。
所以我有两个表,一个是保存我所有交易的交易表,另一个是保存所有商品价格的价格表,当购买商品时,我从价格表中获取 itemid,这样我就可以获取一个商品的价格交易我需要加入这两个,这是我的表结构:
价格表
|priceid | itemName | price |
-----------------------------
|1 |Bread | 20 |
交易表
|transactionid |pricefk | transactiondate |
--------------------------------------------
|112 |1 |2018-03-22 19:15:05|
我知道如何使用 3 个查询获取总收入、一天、一周和一个月的收入,但想要一种方法在一个查询中获取所有 3 个值
我知道的是
SELECT SUM(p.price) as totalrevenue FROM transaction_table t JOIN price_tb p ON p.priceid = t.pricefk
获取所有生命周期的收入
SELECT SUM(p.price) as totalrevenue FROM transaction_table t JOIN price_tb p ON p.priceid = t.pricefk where t.transactiondate >= NOW() - INTERVAL 1 DAY
在一天内获得 yield
SELECT SUM(p.price) as totalrevenue FROM transaction_table t JOIN price_tb p ON p.priceid = t.pricefk where YEARWEEK(t.transactiondate)=YEARWEEK(NOW())
一周内获得 yield
SELECT SUM(p.price) as totalrevenue FROM transaction_table t JOIN price_tb p ON p.priceid = t.pricefk WHERE MONTH(t.transactiondate) = MONTH(CURRENT_DATE())
AND YEAR(t.transactiondate) = YEAR(CURRENT_DATE())
在一个月内获得收入
How can I combine all these queries in one query?
最佳答案
所有这些查询只返回一行,所以如果你需要在一行上的所有结果,你可以尝试使用交叉连接
select t1.totalrevenue_lifetime, t2.totalrevenue_day, t3.totalrevenue_week , t4.totalrevenue_month
from (
SELECT SUM(p.price) as totalrevenue_lifetime
FROM transaction_table t
JOIN price_tb p ON p.priceid = t.pricefk
) t1
CROSS JOIN (
SELECT SUM(p.price) as totalrevenue_day
FROM transaction_table t
JOIN price_tb p ON p.priceid = t.pricefk
where t.transactiondate >= NOW() - INTERVAL 1 DAY
) t2
CROSS JOIN (
SELECT SUM(p.price) as totalrevenue_week
FROM transaction_table t
JOIN price_tb p ON p.priceid = t.pricefk
where YEARWEEK(t.transactiondate)=YEARWEEK(NOW())
) t3
CROSS JOIN (
SELECT SUM(p.price) as totalrevenue_month
FROM transaction_table t
JOIN price_tb p ON p.priceid = t.pricefk
WHERE MONTH(t.transactiondate) = MONTH(CURRENT_DATE())
AND YEAR(t.transactiondate) = YEAR(CURRENT_DATE())
) t4
关于mysql - 将独立选择查询的结果组合到一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49469115/