You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于相同值对MySQL表中WIDTH和HEIGHT列的Quantity求和?

MySQL 实现方案

方法一:合并列后分组求和(推荐)

假设你的数据表名为size_data,包含WIDTH、HEIGHT、Quantity三个字段,通过UNION ALL将WIDTH和HEIGHT的数值合并为同一列,再分组求和:

SELECT value, SUM(quantity) AS total_quantity
FROM (
    -- 提取WIDTH列的数值及对应Quantity
    SELECT WIDTH AS value, Quantity FROM size_data
    UNION ALL
    -- 提取HEIGHT列的数值及对应Quantity
    SELECT HEIGHT AS value, Quantity FROM size_data
) AS combined
GROUP BY value
ORDER BY value;

该查询会直接输出每个数值对应的总Quantity,完全匹配你给出的示例结果(如10对应26、15对应37等)。

方法二:条件聚合(保留分列统计)

如果需要同时查看每个数值在WIDTH、HEIGHT各自的总和,再计算总计,可使用条件聚合:

SELECT
    COALESCE(w.value, h.value) AS value,
    COALESCE(w.width_total, 0) AS width_quantity,
    COALESCE(h.height_total, 0) AS height_quantity,
    COALESCE(w.width_total, 0) + COALESCE(h.height_total, 0) AS total_quantity
FROM (
    SELECT WIDTH AS value, SUM(Quantity) AS width_total
    FROM size_data
    GROUP BY WIDTH
) w
LEFT JOIN (
    SELECT HEIGHT AS value, SUM(Quantity) AS height_total
    FROM size_data
    GROUP BY HEIGHT
) h ON w.value = h.value
UNION
SELECT
    h.value AS value,
    COALESCE(w.width_total, 0) AS width_quantity,
    h.height_total AS height_quantity,
    COALESCE(w.width_total, 0) + h.height_total AS total_quantity
FROM (
    SELECT WIDTH AS value, SUM(Quantity) AS width_total
    FROM size_data
    GROUP BY WIDTH
) w
RIGHT JOIN (
    SELECT HEIGHT AS value, SUM(Quantity) AS height_total
    FROM size_data
    GROUP BY HEIGHT
) h ON w.value = h.value
WHERE w.value IS NULL
ORDER BY value;

注:此写法兼容MySQL 8.0以下不支持FULL OUTER JOIN的版本。

PHP 实现方案

如果需要在代码层处理数据,可按以下步骤实现:

1. 连接数据库并获取数据(PDO示例)

<?php
$host = 'localhost';
$dbname = 'your_database';
$username = 'your_username';
$password = 'your_password';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $pdo->query("SELECT WIDTH, HEIGHT, Quantity FROM size_data");
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die("数据库连接失败: " . $e->getMessage());
}
?>

2. 遍历计算总和

<?php
$totalMap = [];

foreach ($data as $row) {
    $width = $row['WIDTH'];
    $height = $row['HEIGHT'];
    $quantity = $row['Quantity'];

    // 累加WIDTH对应数值的Quantity
    $totalMap[$width]['width'] = ($totalMap[$width]['width'] ?? 0) + $quantity;
    // 初始化height值(避免未定义索引)
    if (!isset($totalMap[$width]['height'])) $totalMap[$width]['height'] = 0;

    // 累加HEIGHT对应数值的Quantity
    $totalMap[$height]['height'] = ($totalMap[$height]['height'] ?? 0) + $quantity;
    // 初始化width值
    if (!isset($totalMap[$height]['width'])) $totalMap[$height]['width'] = 0;
}

// 整理结果并排序
$result = [];
foreach ($totalMap as $value => $quantities) {
    $result[] = [
        'value' => $value,
        'width_quantity' => $quantities['width'],
        'height_quantity' => $quantities['height'],
        'total_quantity' => $quantities['width'] + $quantities['height']
    ];
}
usort($result, fn($a, $b) => $a['value'] - $b['value']);

// 输出结果
print_r($result);
?>

内容的提问来源于stack exchange,提问作者kocat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 20:32:35