我在“MENU”表中有一些行
id, shop, size
1, 1 , 3
2, 1 , 8
3, 2 , 5
我需要为每个商店显示1行,因此如果商店ID相同,则显示列大小上具有高值的行,结果应如下所示
id, shop, size
2, 1 , 8
3, 2 , 5
此外,如果两行的size都为0,则只显示1行
我需要这样的东西
SELECT * FROM menu GROUP by shop
但要显示具有高值的行
我已经尝试过这个方法,但是如果行在列大小上有0,那么它会同时显示这两个值
SELECT a.* FROM menu a
LEFT JOIN menu b
ON a.shop=b.shop AND a.size< b.size
WHERE b.size NULL
2条答案
按热度按时间kcrjzv8t1#
如果您使用的是支持 * 窗口函数 * 的最新版本的MySql,则通常使用 row_number 解决此问题:
h7appiyu2#
解决此类问题最典型的方法是使用
ROW_NUMBER
、RANK
或DENSE_RANK
,如Stu的答案所示。另一个选项:获取每个商店的最大大小,然后使用此结果检索行:
另一个选项:选择不存在具有相同商店但尺寸更大的行的行: