假设我有下面的表格,里面有几百种不同颜色的玩具...
---------------------------
ITEM | COST | COLOR
---------------------------
1 | 12.00 | BLUE
2 | 10.98 | RED
3 | 9.34 | BLUE
4 | 11.33 | WHITE
5 | 8.00 | YELLOW
. | . | .
. | . | .
. | . | .
如果我想选择三个价格最低的蓝色玩具,我当然可以写...。
SELECT * FROM TOYS WHERE Color = 'BLUE' ORDER BY COST LIMIT 3;
但是,有没有一种方法可以让我选择唯一指定数量的价格最低的黄色、白色和蓝色玩具,就像我说...
SELECT * FROM TOYS WHERE COLOR = 'YELLOW' (LIMIT 1) AND COLOR = 'WHITE' (LIMIT 3) AND COLOR = 'BLUE' (LIMIT 2) ORDER BY COST
是否可以在MySQL中完全做到这一点,而不用在PHP中走过数组?
select * from toys where color = 'Yellow' (LIMIT 1)
UNION
select * from toys where color = 'White' (LIMIT 3)
UNION
select * from toys where color = 'Blue' (LIMIT 2)
(select * from toys where color = 'Yellow' LIMIT 1)
UNION ALL
(select * from toys where color = 'White' LIMIT 1)
SELECT *
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY COLOR ORDER BY COST) AS RN
FROM TOYS
WHERE COLOR IN ('YELLOW', 'WHITE', 'BLUE')) sub
WHERE RN <= CASE COLOR WHEN 'YELLOW' THEN 1 WHEN 'WHITE' THEN 3 WHEN 'BLUE' THEN 2 END