MYSQL - 检测具有共同三列的行

标签 mysql rows detect matching divide

我正在开发一个小脚本,它将订单信息从较新的数据库(用于在线订单)传输到一个过时的自定义数据库,该数据库中有 20 多年的信息并且它只接受制表符分隔的输入(相当痛苦)并且无法处理多项目 SKU(即每个 SKU 是一件商品)。

我创建了一个表(未显示),将多项目 SKU 与过时系统的单个 SKU 相关联 - 您可以在下面的第 2 行到第 4 行中看到三个项目合二为一(在线称为“pcclean”)最初是一个订单行,分为三行(CL31、CL15 和 CL13 - 旧系统的 SKU)。

但是,在生成此表时,我无法将价格分成三部分。价格变化过于频繁,无法依赖储值。

我想要做的是检测 channel 、订单和代码何时相同,然后将这些行中的“总计”除以符合该条件的行数。

因此第 2-4 行不会显示“12.45”,它们每行会显示“4.15”。

Channel                 Order   QTY  SKU    Total    Code
Amazon Seller Central   1518    1    PX5    7.29     PX5
Amazon Seller Central   1519    1    CL31   12.45    pcclean
Amazon Seller Central   1519    1    CL15   12.45    pcclean
Amazon Seller Central   1519    1    CL13   12.45    pcclean
Amazon Seller Central   1520    1    MS516  25       MS516
Amazon Seller Central   1521    1    PX10   4.49     PX10
Amazon Seller Central   1522    1    CL31   12.45    pcclean
Amazon Seller Central   1522    1    CL15   12.45    pcclean
Amazon Seller Central   1522    1    CL13   12.45    pcclean
Amazon Seller Central   1523    1    PX40   12.94    PX40
Amazon Seller Central   1524    1    PX12   12.49    PX12
Amazon Seller Central   1525    1    AD254  14.05    AD36
Amazon Seller Central   1526    1    MS516  25       MS516
Amazon Seller Central   1527    1    CL31   12.45    pcclean
Amazon Seller Central   1527    1    CL15   12.45    pcclean
Amazon Seller Central   1527    1    CL13   12.45    pcclean
Amazon Seller Central   1528    1    PX13   27.54    px13
Amazon Seller Central   1529    1    PX28   18.02    PX28
Amazon Seller Central   1530    1    PX28   18.02    PX28
Amazon Seller Central   1531    1    PX40   12.94    PX40
Amazon Seller Central   1532    1    PX33   29.98    px33
Amazon Seller Central   1533    1    PX47   12.44    PX47
Amazon Seller Central   1534    6    PX1    64.44    1PX1
Amazon Seller Central   1534    1    PX40   18.43    px40px35
Amazon Seller Central   1534    1    PX35   18.43    px40px35
eBay                    104     1    MS516  16       150282363749

有什么想法吗?

最佳答案

SELECT *,total/cnt.val FROM `mytable` 
LEFT JOIN (SELECT `Channel`,`Order`,`Code`,COUNT(*) AS val 
           FROM `mytable` GROUP BY `Channel`,`Order`,`Code`) AS cnt 
USING (`Channel`,`Order`,`Code`);

此处示例:http://www.sqlfiddle.com/#!2/cdd16/28

关于MYSQL - 检测具有共同三列的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13068185/

相关文章:

mysql - 我想要一个 mysql 查询。所有包含大写字母的字段

php - 执行 PDO 删除语句时遇到问题

sql - 按日期名称转换列中的行

mysql - 如何在 MySQL 中更新具有不同值的多行?

swift - 当碰撞发生时如何快速执行操作? (我没有使用 Sprite 套件)

objective-c - 如何检测字符是大写还是小写?

java - 如何检测以全屏模式运行的非 Java 程序?

C++ MySQL数据库连接

PHP + MariaDB - 让 PHP 显示一次 MySQL 结果?

php - mySQL 查询被搞乱了