如何在同一查询中重用功能结果

时间:2013-06-03 23:01:32

标签: mysql

我有以下查询:

SELECT COUNT(id) FROM users WHERE 
DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), birthday)), "%Y") >17 AND 
DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), birthday)), "%Y") <22

应该返回18到21岁之间的人数,确实如此。问题是我不喜欢我两次运行相同的功能集。我该如何避免?

2 个答案:

答案 0 :(得分:3)

MySQL中有一个名为BETWEEN的神奇运算符。观察:

SELECT COUNT(`id`) FROM `users`
  WHERE DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(),`birthday`)),"%Y")
      BETWEEN 18 and 21;

请注意,要使用的值是包含的,而不是独占的。

另请注意,您可以更简单地执行此操作:

WHERE DATE_ADD(`birthday`,INTERVAL 18 YEAR)
          BETWEEN NOW() AND DATE_ADD(NOW(),INTERVAL 3 YEAR)

答案 1 :(得分:0)

在这种特定情况下,您可以使用BETWEEN运算符,但也可以使用子查询来处理更常见的情况。

SELECT COUNT(id)
FROM users
WHERE DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), birthday)), "%Y") BETWEEN 18 and 21;

子查询版本:

SELECT COUNT(id)
FROM (
  SELECT
    id,
    DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), birthday)), "%Y") days_from_birthday
  FROM users
) as sub