具有以下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 | 4
33 | 5
因此,查询显示10行,在这种情况下,具有3个唯一的service_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个唯一的service_id-12、21、33、34、38、43、44、45、46、48,但总共有24行。
答案 0 :(得分:1)
如果我理解正确,可以尝试在where子查询中将Distinct
与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 |
答案 1 :(得分:1)
在MySQL 8+中,我们可以在此处尝试使用DENSE_RANK
SELECT service_id, service_box_id
FROM
(
SELECT *, DENSE_RANK() OVER (ORDER BY service_id) dr
FROM table1
) t
WHERE dr <= 10;
如果您使用的是早期版本的MySQL,则我们将加入一个子查询,该子查询将找到前10个service_id
值:
SELECT t1.service_id, t1.service_box_id
FROM table1 t1
INNER JOIN
(
SELECT DISTINCT service_id
FROM table1
ORDER BY service_id
LIMIT 10
) t2
ON t1.service_id = t2.service_id;
答案 2 :(得分:1)
如果您想要最低的服务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
);