获取最低价格ID而无需内部选择

时间:2014-04-04 17:34:22

标签: mysql sql

我有一个名为a的表,其中包含以下数据:

+-----+-----------+-------+
|  id | parent_id | price |
+-----+-----------+-------+
|   1 |         1 |   100 |
|   2 |         1 |   200 |
|   3 |         1 |    99 |
|   4 |         2 |  1000 |
|   5 |         2 |   999 |
+-----+-----------+-------+

我想获得每个parent_id的id min pirce。 有没有子查询得到这个结果的方法?

+-----+-----------+-------+
|  id | parent_id | price |
+-----+-----------+-------+
|   3 |         1 |    99 |
|   5 |         2 |   999 |
+-----+-----------+-------+

6 个答案:

答案 0 :(得分:5)

SELECT D1.id, D1.parent_id, D1.price
FROM Data D1
LEFT JOIN Data D2 on D2.price < D1.price AND D1.parent_id = D2.parent_id
WHERE D2.id IS NULL

答案 1 :(得分:2)

以下是没有子查询的方法。我没有经过测试,请告诉我它是否有效!

SELECT t.id, t.parent_id, t.price
FROM table t
LEFT JOIN table t2
  ON (t.parent_id = t2.parent_id AND t.price > t2.price)
GROUP BY t.id, t.parent_id, t.price
HAVING COUNT(*) = 1 AND max(t2.price) is null
ORDER BY t.parent_id, t.price desc;

答案 2 :(得分:1)

试试这个:

SELECT T1.id,T2.parent_id,T2.price FROM
(SELECT id,price
 FROM TableName) T1
INNER JOIN
(
SELECT parent_id,MIN(price) as price
FROM TableName
GROUP BY parent_id) T2 ON T1.price=T2.price

请参阅SQL Fiddle中的结果。

答案 3 :(得分:0)

尝试分组,

SELECT parent_id,min(price)
FROM TableName
GROUP BY parent_id

答案 4 :(得分:0)

您可以使用LEFT JOIN

执行此操作
SELECT a.id, a.parent_id, a.price
FROM a
LEFT JOIN a AS b ON b.price < a.price AND b.parent_id = a.parent_id
WHERE b.id IS NULL

在这个小提琴上找到结果: http://sqlfiddle.com/#!2/09c888/10

答案 5 :(得分:0)

您可以在不使用任何连接或子查询的情况下尝试此操作,您肯定会获得所需的结果。

按订单价格选择TOP 2