2010-04-27 90 views
0

我目前正在开发一个将根据潜在客户数据生成报告的程序。我的问题是,我正在运行3个查询,我只想运行一个查询。例如,我想收集过去一天产生的线索的数据,我想知道有多少线索总数,以及那个时间段内有多少销售线索。 (售出= 1 /售出= 0)。问题出现在这个查询目前正在进行2个查询,其中一个销售= 1WHERE销售= 0销售WHERE。这一切都很好,但是当我想要在过去一天,一周,一个月,一年以及所有时间生成这些数据时,我将不得不运行10个查询来获取这些数据。我觉得这是一个更有效的方式。我知道我可以为此创建一个mySQL函数,但我不明白这是如何解决这个问题的。 谢谢!是否有可能在mySQL中创建多层WHERE语句

+0

何处> xyz AND sold = 1? – 2010-04-27 22:17:51

+0

我知道如何使用AND和OR语句。我想我想知道是否有一种方法来分组语句返回多个结果集 – Brendan 2010-04-27 22:25:34

回答

1

一种方法做的是利用聚合函数(通常SUMCOUNT帮助你在这种情况下最)随着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)可以像要通过使用ANDOR一样复杂。

Disclamer:代码没有经过测试,这只是作为一个应该稍作修改的例子。

+0

太棒了,我更喜欢这个选择,它应该适用于使用submission_date>(NOW() - INTERVAL 1 DAY也是 – Brendan 2010-04-27 22:37:58

+0

请参阅我的更新代码。 – Senseful 2010-04-27 22:40:40

+0

非常感谢您的帮助,使我的生活很容易:) – Brendan 2010-04-27 23:00:12

2

为什么不GROUP BY出售让您获得总计售出和未售出

+0

真棒,这将解决售出vs未售出的问题。任何方式来做这一天,一周,一个月,一年? – Brendan 2010-04-27 22:31:06

+0

@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

相关问题