mysql - 将独立选择查询的结果组合到一个表中

标签 mysql

我正在学习如何在 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/

相关文章:

mysql - 查询查找所有未出租的 DVD

c# - 改进 Entity Framework 中的嵌套查询

mysql - 我怎样才能在mysql中设置序列?

Mysql插入排序规则问题

mysql - 分组依据——不对 NULL 进行分组并控制显示的记录

java - 无法配置 JAAS 身份验证

mysql - Drupal 7 手动查询 webforms 数据库表

php - INSERT IGNORE 上的主键自动递增

php - 通过 phpMyAdmin 使用本地 PHP 脚本进行在线数据库连接

MYSQL:根据条件从交叉连接中获取某些数据