mysql - 多重连接的 SUM 记录错误

标签 mysql

我有 3 个表请求计划级别

这是表格请求:

 id  plan_id response_code client_id
  1  1        200           1          
  2  1        200           1
  3  1        400           1
  4  1        500           1

这是表格计划:

 id       client_id
  1             1         
  2             1
  3             1
  4             1

这是表价:

     id  plan_id
      1  1               
      2  2       
      3  3       
      4  4     

我想要连接 3 个表并在表请求中计数,response_code 为 200、400 和 500 的记录有多少。但我得到了错误的值。这是我的查询

        SELECT 
      requests.id,
      SELECT SUM(case 
      when requests.response_code = 200 then 
      1 else 0
       end) as resquest200,
      SELECT SUM(case 
      when requests.response_code = 500 then 
      1 else 0
       end) as resquest500,
      response_code,
    FROM requests
    JOIN plan
    ON requests.plan_id = plan.id
    JOIN price
    ON plan.id = price.plan_id
    GROUP BY request.id

我尝试过:

 SELECT 
 request.id,
 (
SELECT SUM(case 
when request.response_code = 200 then 
1 else 0
end) FROM request) as resquest200,
response_code,
FROM request
JOIN plan
ON requests.plan_id = plan.id
JOIN price
ON plan.id = price.plan_id
GROUP BY request.id

并且它的总和正确。如何优化我的查询?请帮助我

最佳答案

如果您想确定请求总数,那么 COUNT() 是比 SUM() 更好的选择

SELECT COUNT(*), response_code FROM requests
GROUP BY response_code

您为什么要加入计划和价格?您需要从这些表中返回一些数据吗?

关于mysql - 多重连接的 SUM 记录错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55741493/

相关文章:

mysql - 在 SQL 中迭代日期列

MYSQL:在 and AND 之后使用连接

javascript - 通过node js将大blob插入到vitess中

PHP:无意的多维数组而不是一维

javascript - 尝试将 php 表转换为 pdf 格式 - 使用 jsPDF-auto-table 将 php 查询结果(多条记录)转换为格式良好的 pdf 文件

php - MySQL:根据同一表的一条记录中的一个选定字段中的值删除表中的多行

mysql - 在一个查询中使用删除和选择子句

mysql - 更新 MySQL 中的排序顺序和插入

MySQL 使用 CASE WHEN ELSE 根据另一列和子查询中的值过滤产品 ID?

mysql - UNIX_TIMESTAMP 为空