mysql - 从不同的表中选择最大值作为列
问题描述
有2张桌子。表 1 被称为Purchases
,它有类似的列Id
,CustomerName
。数据如下:
Id, CustomerName
1 , Customer1
2 , Customer2
3 , Customer3
还有一个名为, , ,Items
列的表。数据如下:Id
PurchaseId
ParameterName
ParameterValue
Id, PurchaseId, ParameterName, ParameterValue
1 , 1 , 'Price' , 100
2 , 1 , 'PercentOff' , 9
3 , 2 , 'Price' , 200
4 , 2 , 'Price' , 300
5 , 2 , 'PercentOff' , 4
6 , 2 , 'PercentOff' , 3
7 , 3 , 'Price' , 400
如您所见,每个 Purchase 都可以连接多个自定义参数。例如,id 为 2 的 Purchase 有 2 个Price
参数和 2 个PercentOff
参数。id 为 3 的购买只有一个参数,称为Price
.
我正在尝试为每次购买选择最大的价格和最大的百分比折扣。这就是我的代码现在的样子:
SELECT
p.Id,
p.CustomerName,
(SELECT
MAX(ParameterValue)
FROM Items
WHERE
p.Id = PurchaseId
AND ParameterName = 'Price')
AS BiggestPrice,
(SELECT
MAX(ParameterValue)
FROM Items
WHERE
p.Id = PurchaseId
AND ParameterName = 'PercentOff')
AS BiggestPercentOff
FROM Purchases p
这个工作正常,但速度很慢。那么,如何摆脱子选择并加快速度呢?
请注意,某些购买可能没有Price
任何东西。在这种情况下,我需要显示NULL
.
我希望得到这样的数据:
Id, CustomerName, BiggestPrice, BiggestPercentOff
1 , Customer1 , 100 , 9
2 , Customer2 , 300 , 4
3 , Customer3 , 400 , NULL
解决方案
尝试这样做作为一个连接,例如
SELECT
p.Id,
p.CustomerName,
MAX(CASE WHEN ParameterName = 'Price' THEN ParameterValue END) AS BiggestPrice,
MAX(CASE WHEN ParameterName = 'PercentOff' THEN ParameterValue END) AS BiggestPercentOff
FROM Purchases p
LEFT JOIN Items i ON i.PurchaseId = p.Id
GROUP BY
p.Id,
p.CustomerName
ID | 顾客姓名 | 最大价格 | 最大百分比关闭 |
---|---|---|---|
1 | 客户1 | 100 | 9 |
2 | 客户2 | 300 | 4 |
3 | 客户3 | 400 | 无效的 |
让我知道这是否适合您。
推荐阅读
- python - 如何将行添加到具有零值的数据框中?
- ios - 从 Web 服务器下载企业 IPA 文件
- jupyter-notebook - Jupyter kerner venv(虚拟环境)上的 pip install 未更新
- google-apps-script - 两个 Apps 脚本功能在连续运行时起作用,但不能作为一个脚本运行 - 我无法解决问题
- excel - Excel 突出显示单元格范围内的第二个条目
- c - 结构中成员的随机帐号产生相同的号码
- html - 将引导程序 4 升级到引导程序 5
- typescript - 如何使用 cdk typescript 在 dynamodb 上创建管理员用户
- c++ - 使用 Bazel 构建时如何避免#includes 中的相对路径
- python - Python unstack value 错误:索引包含重复条目,无法重塑