Mysql查询中的具体where子句

时间:2016-07-22 15:10:19

标签: mysql

所以我有一个超过900万条记录的mysql表。他们是通话记录。每条记录代表1个人呼叫。列如下:

CUSTOMER
RAW_SECS
TERM_TRUNK
CALL_DATE

还有其他人,但这些是我将要使用的。 所以我需要计算某个Term Trunk中某一周的呼叫总数。然后我需要总结这些呼叫的秒数。然后我需要计算低于7秒的呼叫总数。我总是在2个查询中执行此操作并将它们组合在一起,但我想知道是否有办法在一个查询中执行此操作?我是mysql的新手,所以我确定我的语法很可怕,但这就是我做的......

查询1:

SELECT CUSTOMER, SUM(RAW_SECS), COUNT(*)
FROM Mytable
WHERE TERM_TRUNK IN ('Mytrunk1', 'Mytrunk2')
GROUP BY CUSTOMER;

查询2:

SELECT CUSTOMER, COUNT(*)
FROM Mytable2
WHERE TERM_TRUNK IN ('Mytrunk1', 'Mytrunk2') AND RAW_SECS < 7
GROUP BY CUSTOMER;

有没有办法将这两个查询合并为一个?或者也许只是一种更好的方式呢?我感谢所有的帮助!

1 个答案:

答案 0 :(得分:0)

在单个查询中有两种方法可以达到预期的结果:

  • 条件计数:在count()(或sum())中使用案例表达式或if()函数来仅计算特定记录

  • 使用自联接:使用表的id字段将表连接到自身,并在连接条件中过滤短于7秒的调用的连接右侧的别名

    < / LI>

第二种方法的优点是你可以使用索引来加速它,而条件计数不能使用索引。

SELECT m1.CUSTOMER, SUM(m1.RAW_SECS), COUNT(m1.customer), count(m2.customer)
FROM Mytable m1
LEFT JOIN Mytable m2 ON m1.id=m2.id and m2.raw_secs<7
WHERE TERM_TRUNK IN ('Mytrunk1', 'Mytrunk2')
GROUP BY CUSTOMER;