【发布时间】:2021-09-06 15:07:15
【问题描述】:
我想查找每个组中最便宜和最贵的商品的商品名称。但我不知道为什么我在“SET @maxi := (SELECT A.ItName FROM tblqtdtl B INNER JOIN tblitem A ON A.ItCode = B.ItCode GROUP BY A.ItCode HAVING MAX(B.Price))”附近有 SQL 错误 (1064)。也许我的 sql 代码有问题或遗漏了一些东西
这是我所期待的
| vd code | vd name | cheapest item | cheapest price | Most expensive item | Most Expensive Price |
|---|---|---|---|---|---|
| Vd001 | DEF Textile | Polyester | 2600 | Polyester | 2600 |
| Vd003 | MNO Textile | Polyester | 3228 | Silk | 3950 |
| Vd004 | XYZ Textile | Polyester | 2800 | Silk | 3480 |
这是我的代码
SET @mini :=(SELECT A.ItName FROM tblqtdtl B INNER JOIN tblitem A ON A.ItCode = B.ItCode
GROUP BY A.ItCode HAVING MIN(B.Price)
)
SET @maxi := (SELECT A.ItName FROM tblqtdtl B INNER JOIN tblitem A ON A.ItCode = B.ItCode
GROUP BY A.ItCode HAVING MAX(B.Price)
)
SELECT V.VdCode, V.VdName, @mini AS 'Cheapest Item', MIN(B.Price) AS 'Cheapest Price', @maxi AS 'Most Expensive Item'
,MAX(B.Price) AS 'Most Expensive Price'
FROM tblqthdr C
INNER JOIN tblvendor V ON C.VdCode = V.VdCode
INNER JOIN tblqtdtl B ON C.DocNo = B.DocNo
INNER JOIN tblitem A ON B.ItCode = A.ItCode
WHERE V.ActInd='Y'
GROUP BY V.VdCode
这是输入脚本
tblqdtl
INSERT INTO `tblqtdtl` (`DocNo`, `ItCode`, `Price`) VALUES
('QT001', 'It004', 38700.00),
('QT002', 'It002', 25600.00),
('QT003', 'It005', 21000.00),
('QT004', 'It004', 34000.00),
('QT005', 'It003', 32000.00),
('QT006', 'It002', 31780.00),
('QT007', 'It001', 28000.00),
('QT008', 'It002', 21800.00),
('QT009', 'It004', 32600.00),
('QT010', 'It002', 27500.00);
tbitem
INSERT INTO `tblitem` (`ItCode`, `ItName`, `ItCtCode`) VALUES
('Itestt001', 'Cotton', 'ALA'),
('It002', 'Polyester', 'SIN'),
('It003', 'Wool', 'ALA'),
('It004', 'Silk', 'ALA'),
('It005', 'Rayon', 'SIN');
tblqhdr
INSERT INTO `tblqthdr` (`DocNo`, `DocDt`, `VdCode`) VALUES
('QT001', '20180102', 'Vd003'),
('QT002', '20180203', 'Vd001'),
('QT003', '20180203', 'Vd002'),
('QT004', '20180207', 'Vd004'),
('QT005', '20180304', 'Vd003'),
('QT006', '20180401', 'Vd003'),
('QT007', '20180701', 'Vd005'),
('QT008', '20180902', 'Vd002'),
('QT009', '20180902', 'Vd005'),
('QT010', '20181203', 'Vd004');
tblvendor
INSERT INTO `tblvendor` (`VdCode`, `VdName`, `ActInd`) VALUES
('Vd001', 'ABC Textile', 'Y'),
('Vd002', 'DEF Textile', 'N'),
('Vd003', 'GHI Textile', 'Y'),
('Vd004', 'JKL Textile', 'Y'),
('Vd005', 'MNO Textile', 'N');
【问题讨论】:
-
请分享您需要的示例数据和输出的创建表和插入脚本。
-
对不起,我会分享插入脚本
-
如果您提供您遇到的错误,它也会有所帮助。
-
HAVING MIN(B.Price)没有任何意义。HAVING后面需要跟一个真/假条件表达式。你的意思是HAVING B.Price = MIN(B.Price)? -
这是我的期望所需输出中的价格值与示例数据中的价格值不匹配。
标签: mysql sql subquery inner-join