我有一个名为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 |
+-----+-----------+-------+
答案 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