Mysql 乘法计数

标签 mysql count multiplication

我有一个查询,它将循环遍历订单表,并且作为子查询,还将使用外键计算另一个表中的行数。

SELECT eo.*, (
    SELECT COUNT(*)
    FROM ecom_order_items eoi
    WHERE eo.eo_id = eoi.eoi_parentid
    AND eoi.site_id = '1'
) AS num_prods
FROM ecom_orders eo
WHERE eo.site_id = '1' AND eo_username = 'testuser'

现在,在 ecom_order_items 表上,它有一个 eoi_quantity 字段。我希望查询显示每个订单的产品数量,同时考虑数量字段。

SELECT eo.*, (
    SELECT COUNT(*) * eoi.eoi_quantity
    FROM ecom_order_items eoi
    WHERE eo.eo_id = eoi.eoi_parentid
    AND eoi.site_id = '1'
) AS num_prods
FROM ecom_orders eo
WHERE eo.site_id = '1' AND eo_username = 'testuser'

但是,当我尝试这个时,它只给我提供与以前相同的数字。对于我正在测试的订单,它有 2 个项目,一个数量为 1,另一个数量为 10,并且 num_prod 在两个查询中都返回为 2。

有什么想法吗? :)

最佳答案

如果eoi.eoi_quantity的值由多个值1和10组成,则仅选择其中一个并乘以COUNT(*)。所以你得到的结果是 1 * 2。

对于两项,COUNT(*) = 2,您想要结果为 2 * 1 + 2 * 10 吗?这对我来说似乎不对。我认为您想要计算所有相关订单的总数量,那么为什么不使用 SUM(eoi.eoi_quantity) 来获得 1 + 10 呢?因此你会:

SELECT eo.*, (
    SELECT SUM(eoi.eoi_quantity)
    FROM ecom_order_items eoi
    WHERE eo.eo_id = eoi.eoi_parentid AND eoi.site_id = '1'
) AS num_prods
FROM ecom_orders eo
WHERE eo.site_id = '1' AND eo_username = 'testuser';

但这仍然会为您提供每列相同的值。事实上,像 (SELECT eo.*,...) 这样的子查询如果返回多于一行,将会导致错误。

这就是 Johan 建议您加入这些 table 的原因。您需要连接表以确保行正确链接,然后按您想要的每行 ID 对它们进行分组。怎么样:

SELECT eo.*, SUM(eoi.eoi_quantity)
FROM ecom_orders eo JOIN ecom_order_items eoi ON eo.eo_id = eoi.eoi_parentid
WHERE eo.site_id = '1' 
AND eo_username = 'testuser'
GROUP BY eo.eo_id;

关于Mysql 乘法计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5868497/

相关文章:

python - Karatsuba 算法不正确的结果

python - 如何使用函数将列表相乘?

mysql - Navicat 用户 - 有什么方法可以在新查询的顶部创建变量并在页面上进行处理吗?

javascript - 从服务器文件夹下载文件

java - 数数不存在的东西?

用于统计每小时订单总数的 MySQL 查询每小时始终返回 1

mysql - 用mysql fetch array 显示信息?

mysql - 在 MySQL 8 中使用点数据类型和 st_distance_sphere 查找最近的地方

mysql - 防止 count() 在 mysql 中返回 "NULL"

java - 乘法口诀表格式问题