กระทู้เก่าบอร์ด อ.สุภาพ ไชยา
276 1
URL.หัวข้อ /
URL
PostgreSQL: เลือกราคาสูงสุด 3 อันดับของแต่ละสินค้า?
ใน MS SQL Server 2000 / Access:
ถ้าจะแสดงราคาสูงสุด 3 อันดับของสินค้าแต่ละตัว ผมจะใช้ Top 3 ช่วย
SELECT Product, Price
FROM sales B
WHERE Price IN
(SELECT TOP 3 Price
FROM sales A
WHERE A.Product = B.Product
ORDER BY Price DESC)
ORDER BY Product, Price DESC
ถ้าเป็นใน Postgres จะไม่มี Top ให้ใช้ แต่โชคดีที่มี Limit ให้
ฉะนั้นใน Postgres ผมใช้อย่างนี้ครับ
mydb=# SELECT Product, Price
mydb-# FROM sales AS B
mydb-# WHERE Price IN
mydb-# (SELECT Price
mydb(# FROM sales A
mydb(# WHERE A.Product = B.Product
mydb(# ORDER BY Price DESC Limit 3)
mydb-# ORDER BY Product, Price DESC;
product | price
---------+-------
A | 12
A | 11
A | 11
B | 110
B | 100
C | 60
C | 55
C | 50
C | 50
(9 rows)
ส่วนใน MySQL 4.0.13 ที่ผมใช้อยู่ ยังไม่สนับสนุน Subqueries ถึงแม้จะมี Limit เหมือนใน Postgres ก็ตาม เลยทำไม่ได้ครับ จึงต้องรอเวอร์ชัน 4.1 ก่อน
ถ้าท่านอื่นมีวิธีทำใน MySQL ช่วยแจ้งมาด้วยนะครับ
ถ้าจะแสดงราคาสูงสุด 3 อันดับของสินค้าแต่ละตัว ผมจะใช้ Top 3 ช่วย
SELECT Product, Price
FROM sales B
WHERE Price IN
(SELECT TOP 3 Price
FROM sales A
WHERE A.Product = B.Product
ORDER BY Price DESC)
ORDER BY Product, Price DESC
ถ้าเป็นใน Postgres จะไม่มี Top ให้ใช้ แต่โชคดีที่มี Limit ให้
ฉะนั้นใน Postgres ผมใช้อย่างนี้ครับ
mydb=# SELECT Product, Price
mydb-# FROM sales AS B
mydb-# WHERE Price IN
mydb-# (SELECT Price
mydb(# FROM sales A
mydb(# WHERE A.Product = B.Product
mydb(# ORDER BY Price DESC Limit 3)
mydb-# ORDER BY Product, Price DESC;
product | price
---------+-------
A | 12
A | 11
A | 11
B | 110
B | 100
C | 60
C | 55
C | 50
C | 50
(9 rows)
ส่วนใน MySQL 4.0.13 ที่ผมใช้อยู่ ยังไม่สนับสนุน Subqueries ถึงแม้จะมี Limit เหมือนใน Postgres ก็ตาม เลยทำไม่ได้ครับ จึงต้องรอเวอร์ชัน 4.1 ก่อน
ถ้าท่านอื่นมีวิธีทำใน MySQL ช่วยแจ้งมาด้วยนะครับ
1 Reply in this Topic. Dispaly 1 pages and you are on page number 1
Time: 0.1733s
Select product,max(price) from salse
คือใช้ Function MAX() ของ MySQL เข้าช่วย แต่น่าจะแสดงแค่ค่าสูงสุดเท่า
นั้น ...ไม่แน่ใจว่าถ้าต่อท้ายด้วย limit 3 จะแสดงออกมาตามต้องการหรือเปล่า
เพราะผมยังไม่ได้ลองครับ..