Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 通过值的唯一数量定义限制_Mysql_Sql - Fatal编程技术网

Mysql 通过值的唯一数量定义限制

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

具有以下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个唯一的服务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。