Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MYSQL-返回一次选择减去另一次选择的结果_Mysql_Sql - Fatal编程技术网

MYSQL-返回一次选择减去另一次选择的结果

MYSQL-返回一次选择减去另一次选择的结果,mysql,sql,Mysql,Sql,从本质上说,我试图得到的是在进行广告宣传后,在房产网站上增加房产的浏览量。每个视图都相当于视图表中的一行。假设广告活动持续到2014年1月 我可以运行两个独立的查询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 Vie

从本质上说,我试图得到的是在进行广告宣传后,在房产网站上增加房产的浏览量。每个视图都相当于视图表中的一行。假设广告活动持续到2014年1月

我可以运行两个独立的查询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语句


谢谢

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

选择(查询1)-(查询2)作为增加


[请参见

仅使用条件聚合:

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');
选择SUM(当v.ViewsDate>='2015-01-01'和v.ViewsDate<'2015-02-01'时,则为1,否则为0结束)作为1月,
截至2月31日的总和(当v.ViewsDate>='2015-02-01'和v.ViewsDate<'2015-03-01'时,则为1,否则为0)
从视图v内部连接
属性p
关于v.PropertyId=p.PropertyId
其中p.Property价格介于800和1000之间,并且
p、 位于(“共同沃特福德”、“共同科克”、“共同克莱尔”、“共同克里”、“共同蒂普拉里”)的地产县;
查询中的其他一些提示:

  • 使用表格别名。它们更易于键入和阅读
  • 在中使用
    ,而不是使用
    。这样更易于编写和读取,也更不容易出错
  • 不要对列别名使用单引号。这可能会导致混淆
  • 不要像在日期上使用那样使用
    。所有数据库都内置了对日期的支持,通常不需要将它们作为字符串进行比较
另外,您没有提到正在使用的数据库。可能有更简单的结构


最后,您只需减去前两个值即可得到差异。

绝对完美。非常感谢。感谢您的帮助。它给出的答案似乎与单独运行两个查询略有不同。我的查询1给出的是1月-103日2月-274日。您的查询给出的是1月-70日184日。编辑-刚刚注意到一个县从我会再试一试的