mysql - Mysql查询中的特定where子句

标签 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;

有什么办法可以将这两个查询合二为一吗?或者也许只是一种更好的方法?我感谢所有的帮助!

最佳答案

有两种方法可以在单个查询中实现预期结果:

  • 条件计数:在 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/

相关文章:

php - 无法显示截至今天日期加 7 天的数据库项目

mysql - 决定数据库表架构

mysql - 在 MySQL 中确定给定数字的因子数而不重叠

php - MySQL 表 - 显示一次名称及其总分

mysql - 组合 SELECT 并按不同表中的列进行过滤

php - 有没有不需要javascript的博客网站评论系统?

MySQL 查询不在 cronjob 内运行

php - MySQL SUM 0 在 JOIN 上没有结果

php - in_array 函数的一些问题

mysql - 数据库项目排名可移动权重