【发布时间】:2012-02-27 02:08:58
【问题描述】:
我遇到了一个非常令人沮丧的 SQL 问题,我一生都无法通过派生查询返回复合键但还在该表中的另一个字段上执行 MIN() 聚合函数来解决这个问题。如果我在其中一个复合键上执行 MIN() 会很容易,但是由于我需要返回两个键并对外部查询执行 MIN() 函数,所以我无法弄清楚如何执行此操作.整个查询如下所示:
SELECT
p.name as productname
,tmp.packageid
,tmp.price
,ppk2.packageoptionid
,ppk2.selcomproductid
FROM (
SELECT ppk.productid, ppk.packageid, MIN(ppk.price) as price
FROM product_package ppk
INNER JOIN package pk ON ppk.packageid = pk.id
INNER JOIN [plan] pl ON pk.planid = pl.id
WHERE pk.networkid = 1
GROUP BY ppk.productid, ppk.packageid
) tmp
INNER JOIN product_package ppk2 ON (
ppk2.productid = tmp.productid
AND ppk2.packageid = tmp.packageid
)
INNER JOIN product p ON (p.id = ppk2.productid)
WHERE p.isenabled = 1;
当前结果:
--------------------------------------
productid | packageid | price
1 500 0
1 501 19.95
1 502 29.95
2 501 0
3 500 15
3 504 39.95
期望的结果:
--------------------------------------
productid | packageid | price
1 500 0
2 501 0
3 500 15
派生查询“tmp”是我的问题所在,因为在加入外部表之前,我需要为每个产品/包装组合以最低价格返回唯一的行。
任何帮助将不胜感激!
【问题讨论】:
-
好问题。现在:您能否注册pastebin account,这样我们就不必查看stackoverflow 在您的代码周围放置的那些丑陋的滑块?
:) -
@Droogans 或者你可以格式化代码...
-
@nineside: 好样的,先生。
-
@Droogans:我不了解你,但我跳过任何涉及 pastebin 帐户的问题。
-
感谢 Nineside 的编辑,抱歉,我不应该考虑较低的分辨率。
标签: sql group-by composite-key unique-constraint