我有3個表:MAX函數返回行
Proveedor
+-----+---------+-----------+
| sid | pnombre | direccion |
+-----+---------+-----------+
| 1 | P1 | La Paz |
| 2 | Paco | 31 Pte |
| 3 | Pepe | 31 Pte |
+-----+---------+-----------+
單方面
+-----+-----------+-------+
| pid | pnombre | color |
+-----+-----------+-------+
| 1 | Palanca 1 | Gris |
| 2 | Palanca 2 | Gris |
| 3 | Palanca 3 | Verde |
| 4 | Palanca 4 | azul |
+-----+-----------+-------+
Catalogo
+-----+-----+-------+
| sid | pid | costo |
+-----+-----+-------+
| 1 | 1 | 100 |
| 1 | 2 | 120 |
| 2 | 3 | 90 |
| 1 | 3 | 150 |
| 1 | 4 | 150 |
+-----+-----+-------+
我試圖得到「的‘單方面’的ID與名稱=‘P1’的用戶(部分)具有最高‘costo’(成本)」
我的查詢是這樣的一種:
SELECT pid, MAX(costo)
FROM catalogo
WHERE sid IN(SELECT sid
FROM proveedor
WHERE pnombre = "P1")
GROUP BY pid;
但我的結果是這樣的:
+-----+------------+
| pid | MAX(costo) |
+-----+------------+
| 1 | 100 |
| 2 | 120 |
| 3 | 150 |
| 4 | 150 |
+-----+------------+
,我只SPECT得到1排它必須
+-----+------------+
| pid | MAX(costo) |
+-----+------------+
| 3 | 150 |
+-----+------------+
所以這個問題,我做錯了我的查詢?如何使用MAX()返回1行?
注意: 我已經用另一個查詢解決了這個問題。
但我想了解MAX()是如何工作的
查詢(2)無MAX()來解決:
SELECT pid, costo
FROM catalogo
WHERE sid IN (SELECT sid
FROM proveedor
WHERE pnombre = "P1")
ORDER BY costo DESC
LIMIT 1;
您是否意識到成本150的平局? –
順便說一句,使用'內部連接'作爲gordon回答intent' IN'性能更好# –