是否有可能在mySQL中创建多层WHERE语句
我目前正在开发一个将根据潜在客户数据生成报告的程序。我的问题是,我正在运行3个查询,我只想运行一个查询。例如,我想收集过去一天产生的线索的数据,我想知道有多少线索总数,以及那个时间段内有多少销售线索。 (售出= 1 /售出= 0)。问题出现在这个查询目前正在进行2个查询,其中一个销售= 1
,WHERE
销售= 0
销售WHERE
。这一切都很好,但是当我想要在过去一天,一周,一个月,一年以及所有时间生成这些数据时,我将不得不运行10个查询来获取这些数据。我觉得这是一个更有效的方式。我知道我可以为此创建一个mySQL函数,但我不明白这是如何解决这个问题的。 谢谢!是否有可能在mySQL中创建多层WHERE语句
一种方法做的是利用聚合函数(通常SUM
和COUNT
帮助你在这种情况下最)随着MySQL的IF()
功能。
例如,可以使用的查询,例如:
SELECT
SUM(IF(sold = 1, sold, 0)) AS TotalSold,
SUM(IF(sold = 0, sold, 0)) AS TotalUnsold,
SUM(IF(submission_date > (NOW() - INTERVAL 1 WEEK)
AND sold = 1, sold, 0) AS TotalSoldThisWeek
FROM ...
WHERE ...
条件(例如sold = 1
)可以像要通过使用AND
和OR
一样复杂。
Disclamer:代码没有经过测试,这只是作为一个应该稍作修改的例子。
为什么不GROUP BY出售让您获得总计售出和未售出
真棒,这将解决售出vs未售出的问题。任何方式来做这一天,一周,一个月,一年? – Brendan 2010-04-27 22:31:06
@Brendan:它可能并不比单独的查询更有效率,但是可以创建一个临时表(称为'cutoff_times')和5个临界值,然后执行'main_table AS m JOIN cutoff_times AS t ON m.submission_date> t.cutoff_date'。这是一个'大于连接'而不是通常的等连接。 – 2010-04-27 22:57:28
何处> xyz AND sold = 1? – 2010-04-27 22:17:51
我知道如何使用AND和OR语句。我想我想知道是否有一种方法来分组语句返回多个结果集 – Brendan 2010-04-27 22:25:34