Mysql 选择查询计数和 Distinct 无法正常工作

Posted

技术标签:

【中文标题】Mysql 选择查询计数和 Distinct 无法正常工作【英文标题】:Mysql select query count & Distinct are not working properly 【发布时间】:2022-01-05 02:52:18 【问题描述】:

我正在使用 Laravel 8 开发一个电子商务网站。我编写了以下脚本来找出单个订单号下的总价格和总数量。从以下脚本获取错误,请帮助我。 *首先我写行mysql然后我将转换laravel查询生成器。

SELECT COUNT (total_price) as totaPrice, COUNT (productqty) as proQnty
FROM (SELECT DISTINCT order_id FROM orderDetails)
LEFT JOIN ordertbl 
ON ordertbl.id = orderDetails.order_id;

【问题讨论】:

【参考方案1】:

我猜你想对价格和数量求和,所以使用 SUM() 聚合函数。 此外,您应该将ordertblorderDetails 进行LEFT 连接,而不是相反:

SELECT ot.id,
       SUM(od.total_price) AS totaPrice, 
       SUM(od.productqty) AS proQnty
FROM ordertbl ot LEFT JOIN orderDetails od
ON ot.id = od.order_id
WHERE ot.id = ?
GROUP BY ot.id;

或者,没有连接:

SELECT SUM(total_price) AS totaPrice, 
       SUM(productqty) AS proQnty
FROM orderDetails 
WHERE order_id = ?;

? 替换为所需订单的id

【讨论】:

【参考方案2】:

在您的原始中缺少子查询的表名 alis .. 您的原始查询应该是

SELECT COUNT(total_price) as totaPrice, COUNT(productqty) as proQnty
FROM (
    SELECT DISTINCT order_id FROM orderDetails
) T 
LEFT JOIN ordertbl ON ordertbl.id = T.order_id;

【讨论】:

抱歉运行此脚本显示以下错误“mysql.proc 的列数错误。预期为 21,找到 20。使用 MariaDB 100108 创建,现在运行 100421。请使用 mysql_upgrade 修复此错误”跨度> 答案已更新 .. 删除 count 和 ( .. 之间的空格 .. 告诉我 SELECT DISTINCT order_id, COUNT(total_price) as totaPrice, COUNT(productqty) as proQnty FROM orderDetails LEFT JOIN ordertbl ON ordertbl.id = orderDetails.order_id;这是正确的脚本。好好工作。我还有一个脚本想和你讨论。

以上是关于Mysql 选择查询计数和 Distinct 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 查询慢 SELECT DISTINCT

Mysql DISTINCT 无法以我的语言正常工作

在单个查询中为每个 DISTINCT 选择几条记录

解析mysql中:单表distinct多表group by查询去除重复记录

mysql distinct

计算 DISTINCT 值的出现次数