mysql - 如何比较同一个表中同一列的数据

标签 mysql

我需要比较同一个表的同一列中2017年和2016年的数据。

现在我使用 2 个查询:

第一个查询:

  SELECT 
      SUM(a.netamt) AS netamt2017, b.store_name, c.budget
  FROM 
      site_sales a 
  JOIN 
      site_store b ON b.storenum = a.storenum 
  JOIN 
      site_kpimthslsbgt c ON b.storenum = c.storenum 
  WHERE 
      c.busidate = '2017-01' 
      AND a.busidate >= '2017-01-01' 
      AND a.busidate <= '2017-01-15'
  GROUP BY 
      a.storenum

这适用于 find netamt 2017

第二个查询:

  SELECT 
      SUM(a.netamt) AS netamt2016, b.store_name, c.budget
  FROM 
      site_sales a 
  JOIN 
      site_store b ON b.storenum = a.storenum 
  JOIN  
      site_kpimthslsbgt c ON b.storenum = c.storenum 
  WHERE 
      c.busidate = '2017-01' 
      AND a.busidate >= '2016-01-01' 
      AND a.busidate <= '2016-01-15'
  GROUP BY 
      a.storenum

这用于查找“Netamt 2016”。

我需要组合这两个查询来形成此表:

Here is example for the output

最佳答案

只需使用 sum(case when ... then ... else ... end) 语法:

SELECT
    SUM(CASE WHEN a.busidate BETWEEN '2016-01-01' AND '2016-01-15' THEN a.netamt ELSE 0 END) as netamt2016,
    SUM(CASE WHEN a.busidate BETWEEN '2017-01-01' AND '2017-01-15' THEN a.netamt ELSE 0 END) as netamt2017,
    b.store_name,
    c.budget
FROM site_sales a JOIN site_store b ON b.storenum = a.storenum 
JOIN site_kpimthslsbgt c ON b.storenum = c.storenum 
WHERE c.busidate = '2017-01'
GROUP BY a.storenum

注意:因为您使用了GROUP BYb.store_namec.budget 没有聚合,所以这两列没有意义。

关于mysql - 如何比较同一个表中同一列的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44192076/

相关文章:

php - 我可以在准备好的语句中参数化表名吗?

javascript - 以 Javascript/JSON 显示来自 MYSQL SELECT 的 PHP 结果

python - 如何使用Python从MySQL打开BLOB文件而不保存?

java - Spring Batch循环读取器,同时更改sql查询并写入不同的文件

php - 从两个表中选择数据到两个数组中

php - 我的 Mysql 查询没有比较值

php mysql - 如果不存在则插入项目

php - 输出jquery UI slider 到mysql无法获取PHP文件来获取POST数据

如果可能的话,Mysql HAVING 子句带有条件

mysql - 为什么这个简单的 MySQL 查询不返回行?