Mysql 通过值的唯一数量定义限制
具有以下SQL查询Mysql 通过值的唯一数量定义限制,mysql,sql,Mysql,Sql,具有以下SQL查询 SELECT service_id, service_box_id FROM table1 WHERE 1 LIMIT 10 其结果如下表所示 service_id | service_box_id 12 | 1 12 | 2 12 | 3 21 | 1 21 | 2 33 | 1 33 | 2 33 | 3 33
SELECT service_id, service_box_id FROM table1 WHERE 1 LIMIT 10
其结果如下表所示
service_id | service_box_id
12 | 1
12 | 2
12 | 3
21 | 1
21 | 2
33 | 1
33 | 2
33 | 3
33 | 4
33 | 5
所以,查询显示了10行,在本例中,这些行有3个唯一的服务id值-12、21、33
是否可以在查询中定义LIMIT以显示10个唯一的service_id值,而不在它之前运行另一个sql查询?或任何其他限制查询输出的方法
期望输出:
service_id | service_box_id
12 | 1
12 | 2
12 | 3
21 | 1
21 | 2
33 | 1
33 | 2
33 | 3
33 | 4
33 | 5
34 | 1
34 | 2
38 | 1
43 | 1
43 | 2
43 | 3
44 | 1
44 | 2
45 | 1
45 | 2
46 | 1
46 | 2
48 | 1
48 | 2
因此,10个唯一的服务id-12、21、33、34、38、43、44、45、46、48,但总共有24行。如果我理解正确,您可以尝试在where子查询中使用Distinct with LIMIT
SELECT service_id, service_box_id
FROM table1
WHERE service_id in (
SELECT service_id
FROM (
SELECT Distinct service_id
FROM table1
ORDER BY service_id
LIMIT 10
) t1
)
| service_id | service_box_id |
| ---------- | -------------- |
| 12 | 1 |
| 12 | 2 |
| 12 | 3 |
| 21 | 1 |
| 21 | 2 |
| 33 | 1 |
| 33 | 2 |
| 33 | 3 |
| 33 | 4 |
| 33 | 5 |
| 34 | 1 |
| 34 | 2 |
| 38 | 1 |
| 43 | 1 |
| 43 | 2 |
| 43 | 3 |
| 44 | 1 |
| 44 | 2 |
| 45 | 1 |
| 45 | 2 |
| 46 | 1 |
| 46 | 2 |
| 48 | 1 |
| 48 | 2 |
如果我理解正确,您可以尝试在where子查询中使用Distinct with LIMIT
SELECT service_id, service_box_id
FROM table1
WHERE service_id in (
SELECT service_id
FROM (
SELECT Distinct service_id
FROM table1
ORDER BY service_id
LIMIT 10
) t1
)
| service_id | service_box_id |
| ---------- | -------------- |
| 12 | 1 |
| 12 | 2 |
| 12 | 3 |
| 21 | 1 |
| 21 | 2 |
| 33 | 1 |
| 33 | 2 |
| 33 | 3 |
| 33 | 4 |
| 33 | 5 |
| 34 | 1 |
| 34 | 2 |
| 38 | 1 |
| 43 | 1 |
| 43 | 2 |
| 43 | 3 |
| 44 | 1 |
| 44 | 2 |
| 45 | 1 |
| 45 | 2 |
| 46 | 1 |
| 46 | 2 |
| 48 | 1 |
| 48 | 2 |
在MySQL 8+中,我们可以在这里尝试使用稠密的_列
在MySQL 8+中,我们可以在这里尝试使用稠密的_列
如果您想要最低的服务id值,那么一个简单的方法是:
SELECT service_id, service_box_id
FROM table1
WHERE service_id < (SELECT DISTINCT tt1.service_id
FROM table1 tt1
ORDER BY tt1.service_id
LIMIT 1 OFFSET 10
);
如果您想要最低的服务id值,那么一个简单的方法是:
SELECT service_id, service_box_id
FROM table1
WHERE service_id < (SELECT DISTINCT tt1.service_id
FROM table1 tt1
ORDER BY tt1.service_id
LIMIT 1 OFFSET 10
);
你能告诉我们预期的产量吗?答案是,这取决于你想看到什么。你可以按服务id分组,以获得唯一的服务。你能告诉我们预期的输出吗?答案是,这取决于你想看什么。你可以根据服务id分组,以获得唯一的服务。帖子中添加了服务Stim Biegeleisen。