基本上我试图获得的是在投放广告活动后,物业网站上的房产观点增加。每个视图都等于视图表中的一行。假设广告活动在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语句?
由于
答案 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
。所有数据库都内置了对日期的支持,您通常不需要将它们视为字符串进行比较。另外,您没有提及您正在使用的数据库。可能有更简单的结构。
最后,你可以通过减去前两个值来获得差异。