首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组合MySQL查询

组合MySQL查询
EN

Stack Overflow用户
提问于 2012-03-25 04:53:29
回答 1查看 78关注 0票数 0

我现在有一个查询,它显示了这段时间之间的所有呼叫,是否有方法将其格式设置为在一个查询中显示"day (9-5)“和"night (5-12)”?

代码语言:javascript
复制
select dst, count(dst) as Day from cdr 
WHERE lastapp='Queue' 
AND Date(calldate) = '2012-03-23' 
AND TIME(calldate) BETWEEN '08:00' AND '17:00' 
GROUP BY dst;

+------+-----+
| dst  | Day |
+------+-----+
| 1010 |  10 |
| 1011 |  21 |
| 1012 |   7 |
+------+-----+

理想情况下,我想要的是这样,这样我就可以在PHP中的一个数组中抓取它,而不必进行两次查询。

代码语言:javascript
复制
+------+-----+-------+
| dst  | Day | Night |
+------+-----+-------+
| 1010 |  10 |  20   |
| 1011 |  21 |  12   | 
| 1012 |   7 |  4    |
+------+-----+-------+
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-25 05:16:03

是的,你可以这样写:

代码语言:javascript
复制
SELECT dst,
       COUNT(IF(TIME(calldate) BETWEEN '08:00' AND '17:00', 1, NULL)) AS Day,
       COUNT(IF(TIME(calldate) > '17:00', 1, NULL)) AS Night
  FROM cdr
 WHERE lastapp = 'Queue'
   AND DATE(calldate) = '2012-03-23'
 GROUP
    BY dst
;

(COUNT(...)统计...不为null的行数。MySQL听起来像什么就做什么--参见http://dev.mysql.com/doc/refman/5.6/en/control-flow-functions.html#function_if --尽管我应该提一下,它是一个MySQL特定的函数。如果您没有明确地将问题标记为MySQL,我会转而建议使用CASE WHEN boolean THEN value_if_true ELSE value_if_false END,因为这是大多数或所有DMBSes支持的标准语法。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9855536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档