MYSQL - 返回一个SELECT的结果减去另一个SELECT

时间:2015-02-27 21:18:09

标签: mysql sql

基本上我试图获得的是在投放广告活动后,物业网站上的房产观点增加。每个视图都等于视图表中的一行。假设广告活动在2014年1月举行。

我可以运行2个单独的查询1)获得1月份的计数2)获得2月份的计数

查询1 - 1月份的观看次数

    SELECT COUNT(Views.ViewId) AS 'January Munster Views'
FROM Views
INNER JOIN Property
ON Views.PropertyId=Property.PropertyId
WHERE Views.ViewsDate LIKE '2015-01-%'
AND Property.PropertyPrice BETWEEN "800" AND "1000"
AND (Property.PropertyCounty='Co Waterford' OR Property.PropertyCounty='Co Cork' OR Property.PropertyCounty='Co Clare' 
    OR Property.PropertyCounty='Co Kerry' OR Property.PropertyCounty='Co Tipperary' OR Property.PropertyCounty='Co Limerick' );

结果= 103


查询2 - 二月份的观看次数

    SELECT COUNT(Views.ViewId) AS 'February Munster Views'
FROM Views
INNER JOIN Property
ON Views.PropertyId=Property.PropertyId
WHERE Views.ViewsDate LIKE '2015-02-%'
AND Property.PropertyPrice BETWEEN "800" AND "1000"
AND (Property.PropertyCounty='Co Waterford' OR Property.PropertyCounty='Co Cork' OR Property.PropertyCounty='Co Clare' 
    OR Property.PropertyCounty='Co Kerry' OR Property.PropertyCounty='Co Tipperary' OR Property.PropertyCounty='Co Limerick' );

结果= 274

是否有任何方法可以返回171 ,因为列标题为"增加" ?

我当然可以用Java或PHP来完成这项工作,但我想知道它是否可以只使用SQL语句?

由于

2 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,只需将每个查询放在括号中并按如下方式减去它们:

SELECT(query1) - (query2)AS Increase

[见https://stackoverflow.com/questions/1589070/subtraction-between-two-sql-queries]

答案 1 :(得分:0)

只需使用条件聚合:

SELECT SUM(CASE WHEN v.ViewsDate >= '2015-01-01' and v.ViewsDate < '2015-02-01' THEN 1 ELSE 0 END) AS Jan,
       SUM(CASE WHEN v.ViewsDate >= '2015-02-01' and v.ViewsDate < '2015-03-01' THEN 1 ELSE 0 END) AS Feb
FROM Views v INNER JOIN 
     Property p
     ON v.PropertyId = p.PropertyId
WHERE p.PropertyPrice BETWEEN 800 AND 1000 AND
      p.PropertyCounty IN ('Co Waterford', 'Co Cork', 'Co Clare', 'Co Kerry', 'Co Tipperary');

查询中的其他一些提示:

  • 使用表别名。它们更容易打字和阅读。
  • 使用IN代替OR。这也更容易编写和阅读,更不容易出错。
  • 不要使用单引号作为列别名。这可能会导致混淆。
  • 不要在约会时使用like。所有数据库都内置了对日期的支持,您通常不需要将它们视为字符串进行比较。

另外,您没有提及您正在使用的数据库。可能有更简单的结构。

最后,你可以通过减去前两个值来获得差异。