从连接表中选择 min
Posted
技术标签:
【中文标题】从连接表中选择 min【英文标题】:selecting min from joined tables 【发布时间】:2014-01-07 19:10:46 【问题描述】:我自己无法解决这个问题,所以我想知道你们是否可以帮助我。我试图在谷歌、*** 和其他几个位置找到我的答案,但没有任何结果..
我做了一个查询:
SELECT leverancier.leveranciers_id,
medicijn.artikelnr,
medicijn.naam,
medicijn.in_voorraad,
medicijn.min_voorraad,
min(order_medicijn.inkoopprijs) AS price
FROM leverancier
INNER JOIN voorraadorder
ON leverancier.leveranciers_id = voorraadorder.leverancier_id
INNER JOIN order_medicijn
ON order_medicijn.voorraadorder_id = voorraadorder.voorraadorder_id
INNER JOIN medicijn
ON medicijn.artikelnr = order_medicijn.artikel_id
GROUP BY leverancier.leveranciers_id,
medicijn.artikelnr,
medicijn.naam,
medicijn.in_voorraad,
medicijn.min_voorraad
ORDER BY artikelnr
结果如下:
Leveranciers_ID / artikelnr / naam in_voorraad / min_voorraad / price
2 1 Aspirine 100 50 0.74
1 1 Aspirine 100 50 0.75
2 2 Abacivr 200 180 4.50
4 2 Abacivr 200 180 4.00
4 3 Acetazolamide 100 90 1.20
5 4 Ciclovir 145 120 0.50
3 5 levoceterizine 125 120 2.00
问题来了: 我需要什么查询才能获得相同的结果,但仅使用每个 artikelnr 价格最低的记录。所以结果会是这样的:
Leveranciers_ID / artikelnr / naam in_voorraad / min_voorraad / 价格
2 1 Aspirine 100 50 0.74
4 2 Abacivr 200 180 4.00
4 3 Acetazolamide 100 90 1.20
5 4 Ciclovir 145 120 0.50
3 5 levoceterizine 125 120 2.00
如果回答此问题需要任何其他信息,请询问我。
提前致谢
【问题讨论】:
您使用的 RDBMS 是什么? 我实际上使用了 2 个 RDBMSystems。我使用 mysqlWorkbench 并编辑我使用 phpMyAdmin 的一些值 从您的查询中删除聚合(min()) 和分组依据,然后尝试以下操作:select * from ...inner join....
并在末尾添加 where 子句:Where order_medicijn.inkoopprijs= (select min(t2.inkoopprijs) from order_medicijn t2 where t2.artikel_id=medicijn.artikelnr)
非常感谢!这就是我一直在寻找的。span>
【参考方案1】:
一种可能的解决方案:添加一个内部 SQL 来计算每个 artikelnr 的 min 价格并使用 HAVING 子句,该子句使用内部 SQL 来过滤结果。
干杯
【讨论】:
以上是关于从连接表中选择 min的主要内容,如果未能解决你的问题,请参考以下文章