所以我有一个包含超过 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;
有什么办法可以将这两个查询合二为一吗?或者也许只是一种更好的方法?我感谢所有的帮助!
最佳答案
有两种方法可以在单个查询中实现预期结果:
条件计数:在
count()
(或sum()
)中使用 case 表达式或 if() 函数来仅计算特定记录使用自连接:使用表的 id 字段将表自身左连接,并在连接条件中过滤连接右侧的别名,调用时间短于 7 秒
第二种方法的优点是可以使用索引来加速,而条件计数不能使用索引。
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;
关于mysql - Mysql查询中的特定where子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38529874/