【发布时间】:2021-10-27 03:57:21
【问题描述】:
假设我有 2 个表 A 和 B。
这 2 个表共有 3 列,分别是 Name、Id 和 Price。
这是我用于 1 个表的查询:
SELECT Name, Id, Price FROM A WHERE Id = "123" and Price = (SELECT MIN(Price) FROM A);
我刚刚意识到,当最低价格由另一个 Id 持有时,此查询不起作用。
所以我环顾四周,我认为我应该使用 GROUP BY ?
我已将其更改为:
SELECT Name, MIN(Price) FROM A WHERE Id = "123" GROUP BY Name;
但这不是预期的结果。
假设在表 A 中我有:
| Name | Id | Price |
|---|---|---|
| Au | 123 | 12 |
| Be | 123 | 16 |
| St | 122 | 9 |
| Ge | 123 | 10 |
对于表 B,我有:
| Name | Id | Price |
|---|---|---|
| La | 123 | 14.5 |
| La | 123 | 12 |
| St | 123 | 13 |
| Is | 123 | 12 |
| Is | 123 | 10 |
| La | 123 | 10 |
| Is | 123 | 10 |
而预期的结果是:
| Name | Price |
|---|---|
| Ge | 10 |
| Is | 10 |
| La | 10 |
预期结果是 1 行长,因为在数据集中只有一行与条件匹配,但如果我有另一行价格为 10 且 ID 为 123,它也应该存在。因此,如果有更多符合条件的行,我希望它们出现在结果中。
问题是,当我使用 UNION 执行以下查询时,我不知道如何获得特定 ID 的最低价格:
SELECT Name, Id, Price FROM A UNION SELECT Name, Id, Price FROM B;
那么我可以在查询中添加什么以获得预期的结果,然后如果我使用联合来获得 2 个表中特定 ID 的最低价格,它将如何工作?
【问题讨论】:
-
你的 B 表数据呢?
-
您的第一个查询应该会容易得多:
SELECT Name, Id, Price FROM A WHERE Id = "123" order by Price limit 1; -
我已经编辑了我的帖子以匹配我当前的数据和预期的结果
标签: mysql sql group-by union min