mysql选择结合更多条件

时间:2012-11-08 12:19:53

标签: mysql select where

我有2个表,其值如下所示:

**tbl_users**
user_ID      name     
1          somename1   
2          somename2   
3          somename3   

**tbl_interviews**
int_ID     user_ID      answer          date      
 1            1         sometextaba   2012-11-04 
 2            2         sometextxcec  2012-10-05
 3            1         sometextabs   2011-06-04
 4            3         sometextxcfc  2012-11-04
 5            3         sometextxcdn  2012-11-04

现在......我应该算一下今年和前几年接受采访的人。 不幸的是我甚至无法选择它们..我正在尝试这样的东西..但它不起作用(不会抛出语法错误但是给出一个空的结果):

SELECT * FROM interviews WHERE ('YEAR(date) = 2012' AND 'YEAR(date) < 2012')

4 个答案:

答案 0 :(得分:1)

您无法匹配两个条件。你的意思是 条件

SELECT * FROM interviews WHERE ('YEAR(date) = 2012' OR 'YEAR(date) < 2012');

但更好,使其成为SARGable

SELECT * FROM interviews WHERE date < '2013-01-01');

SELECT * FROM interviews WHERE date < CONCAT('''', YEAR(CURDATE()), '-01-01''');

答案 1 :(得分:0)

尝试类似

的内容
SELECT * FROM interviews WHERE YEAR(date) <= YEAR(GETDATE())

GETDATE()基本上为您提供当前日期。

现在,如果您计算一下受访者的数量,那将会是这样的

SELECT COUNT(DISTINCT(id)) FROM interviews WHERE YEAR(date) <= YEAR(GETDATE())

答案 2 :(得分:0)

试试这个

select * from tbl_interviews where year(date)<='2012'

答案 3 :(得分:0)

您的查询应该只是:

SELECT     COUNT(DISTINCT user_id) 
FROM       tbl_interviews

说明:你的问题是:“我应该算上今年和前几年接受采访的人。”

首先,这一部分:“今年和前几年”是指今年以及今年之前每年接受采访的人。由于您将来不能进行任何面试,这实际上意味着无论一年中的所有面试。

如果这不是你的意思,那么请重新提出你的问题。 (我有个主意,见下文)

至于“我应该算上人”,我认为这意味着你想要计算每个被采访的人,不管他们做了多少次采访。这是通过简单地计算唯一的user_id来完成的,这是用COUNT(DISTINCT(user_id))

完成的。

现在,关于你的“今年和前几年”,也许你的意思是:

“我希望看到我们今年采访的用户数量,以及我们今年之前采访的用户数量”,然后查询将是:

SELECT     (
           SELECT COUNT(DISTINCT user_id)
           FROM   tbl_interviews
           WHERE  date >= CONCAT(YEAR(current_date()), '-01-01')
           ) thisyear
,          (
           SELECT COUNT(DISTINCT user_id)
           FROM   tbl_interviews
           WHERE  date < CONCAT(YEAR(current_date()), '-01-01')
           ) previousyears