【问题标题】:MYSQL - Return Result of one SELECT minus another SELECTMYSQL - 一个 SELECT 减去另一个 SELECT 的返回结果
【发布时间】:2015-02-27 21:18:08
【问题描述】:

基本上,我想要获得的是在进行广告活动后,房产网站上房产的浏览量会增加。每个视图都等于视图表中的一行。假设广告活动在 2014 年 1 月进行。

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

查询 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 - 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 语句?

谢谢

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

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

    SELECT (query1) - (query2) AS 增加

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

    【讨论】:

    • 绝对完美。非常感谢。
    【解决方案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');
    

    查询中的一些其他提示:

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

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

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

    【讨论】:

    • 感谢您的帮助。它给出的答案似乎与单独运行两个查询略有不同。我的查询 1 给出了 Jan - 103 Feb - 274。您的查询给出了 Jan 70 Feb 184。编辑 - 刚刚注意到 IN 中缺少一个县。我再试一次
    猜你喜欢
    • 2011-05-03
    • 2017-04-05
    • 2018-09-11
    • 2017-11-28
    • 2016-09-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    相关资源
    最近更新 更多