首页 > 试题广场 >

有一张电话表(telephones),id是主键,send_

[单选题]
有一张电话表(telephones),id是主键,send_id表示打电话人的id,receive_id表示接电话人的id,type表示电话是否打成功:

还有一张用户表(users),id也是主键,is_blacklist列中的1 代表该用户是骚扰用户,即他的电话不会打成功,会被系统拦截。


现要查询每天的正常用户给正常用户打电话,无法接通(可能是信号不好、电话欠费等原因导致)的概率,结果保留到小数点后两位,并按日期降序排列。比如上面示例就会得到如下结果


(注意: sqlite 1/2得到的不是0.5,得到的是0,只有1*1.0/2才会得到0.5,sqlite四舍五入的函数为round)

下列sqlite查询语句正确的是()

  • SELECT
    t.date,
    ROUND(
    SUM(
    CASE WHEN t.type = 'no_completed' THEN 1 ELSE 0 END
    ) * 1.0 / COUNT(t.type),
    2
    ) AS p
    FROM
    telephones t
    JOIN users u1 ON t.send_id = u1.id
    AND u1.is_blacklist = 0
    JOIN users u2 ON t.receive_id = u2.id
    AND u2.is_blacklist = 0
    GROUP BY
    t.date
    ORDER BY
    t.date DESC;

  • SELECT
    t.date,
    ROUND(
    SUM(
    CASE t.type WHEN 'completed' THEN 0 ELSE 1 END
    )* 1.0 / COUNT(t.type),
    2
    ) AS p
    FROM
    telephones AS t,
    users as u
    WHERE
    t.send_id = u.id
    AND t.receive_id = u.id
    AND u.is_blacklist = 0
    GROUP BY
    t.date
    ORDER BY
    t.date DESC;

  • SELECT
    t.date,
    ROUND(
    SUM(
    CASE WHEN t.type = 'no_completed' THEN 1 ELSE 0 END
    ) / COUNT(t.type),
    2
    ) AS p
    FROM
    telephones t
    JOIN users u1 ON t.send_id = u1.id
    AND u1.is_blacklist = 0
    JOIN users u2 ON t.receive_id = u2.id
    AND u2.is_blacklist = 0
    GROUP BY
    t.date
    ORDER BY
    t.date DESC;

  • SELECT
    t.date,
    ROUND(
    SUM(
    CASE WHEN t.type = 'no_completed' THEN 1 ELSE 0 END
    ) * 1.0 / COUNT(t.type),
    2
    ) AS p
    FROM
    telephones
    JOIN users u1 ON t.send_id = u1.id
    AND u1.is_blacklist = 0
    JOIN users u2 ON t.receive_id = u2.id
    AND u2.is_blacklist = 0
    GROUP BY
    t.date
    ORDER BY
    t.date DESC;

解释错误的地方:

错误逻辑

  • WHERE t.send_id = u.id AND t.receive_id = u.id这个条件要求同一个用户必须既是电话的发送者又是接收者。在通常的通话记录中,发送者和接收者是两个不同的用户,因此这个条件会导致结果集为空,因为这样的记录在正常情况下不存在。

发表于 2024-09-20 09:51:39 回复(1)
看半天a和d的区别完全没想到是没写表alias
发表于 2025-12-03 11:15:37 回复(0)
  • SQLite 中整数除法问题:要用 * 1.0 转成浮点数再除。

发表于 2025-10-06 17:46:25 回复(0)