所以我有一个超过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;
有没有办法将这两个查询合并为一个?或者也许只是一种更好的方式呢?我感谢所有的帮助!
答案 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;