好的,我的桌子上有一个名为style_number的列。 style_number可以重复。我想选择所有内容,但每个样式编号最多只能选择3个。
因此,例如,如果有4行具有style_number =“style 7”,则只会选择其中3个(无论哪个3,任何3个)。
这有意义吗?
我该怎么做?
谢谢!
注意:我使用的是4.1.22
编辑: 澄清一些困惑。我也需要所有其他列,我需要的不仅仅是“样式7”,或者我可以轻松地限制为3.但是例如,如果我的表格在哪里:
style_number |价格| stone_count
"style 7" | 300 | 2
"style 7" | 400 | 3
"style 7" | 500 | 4
"style 7" | 600 | 5
"style 8" | 200| 1
"style 8" | 300 | 2
我会得到这个结果:
"style 7" | 300 | 2
"style 7" | 400 | 3
"style 7" | 500 | 4
"style 8" | 200| 1
"style 8" | 300 | 2
这是否更有意义?
答案 0 :(得分:1)
我不是MySQL开发人员,但我认为这会给你你想要的东西。虽然没有对性能的承诺:)
SELECT
T1.id,
T1.style_number,
T1.col1,
T1.col2,
...
FROM
My_Table T1
WHERE
(
SELECT
COUNT(*)
FROM
My_Table T2
WHERE
T2.style_number = T1.style_number AND
T2.id < T1.id
) < 3
答案 1 :(得分:0)
SELECT * FROM yourTable WHERE style_number = "style 7" LIMIT 3
这会将结果集限制为最多3行,即数据库引擎首先找到的3行。如果您想要某些属性的前三名,则可以在ORDER BY colName
之前添加LIMIT 3
。
答案 2 :(得分:0)
查看LIMIT语法here。
答案 3 :(得分:0)
TOP子句允许我们指定要返回的行数。
例如:SELECT TOP 3 * FROM table WHERE style_number =“style 7”
答案 4 :(得分:0)
由于您的MySQL版本,您的选择可能非常有限;在一个查询中可能无法做到这一点,所以我想我会给出一个替代方案。
一个简单的解决方案是迭代每个样式并使用LIMIT 3参数查询该样式,但您必须执行大量查询。要将这些组合成单个查询,首先要获取所有样式的列表:
SELECT DISTINCT style_number FROM styles;
然后,您可以遍历style_numbers以使用您的编程语言构建SQL字符串,使其如下所示:
SELECT * FROM styles WHERE style_number = 'style 7' LIMIT 3
UNION
SELECT * FROM styles WHERE style_number = 'style 8' LIMIT 3
UNION
...
希望这有帮助。