Mysql 连接具有最低值的记录

Mysql 连接具有最低值的记录,mysql,sql,Mysql,Sql,我有两个表格,用户和调查。我希望查询表用户并以这样一种方式加入表调查:对于用户表中的每条记录,只返回值最低的调查记录。 我希望避免子查询和临时表 表格用户: -------------- | uid | name | -------------- | 1 | mike | | 2 | john | | 3 | bill | -------------- 表格调查: ---------------------- | id | uid | value | -------------

我有两个表格,用户和调查。我希望查询表用户并以这样一种方式加入表调查:对于用户表中的每条记录,只返回值最低的调查记录。 我希望避免子查询和临时表

表格用户:

--------------
| uid | name |
--------------
| 1  | mike  |
| 2  | john  |
| 3  | bill  |
--------------
表格调查:

----------------------
| id | uid  | value  |
----------------------
| 1  | 3    | 9     |
| 2  | 3    | 5     |
| 3  | 1    | 3     |
| 4  | 1    | 7     |
| 5  | 1    | 2     |
| 6  | 2    | 4     |
| 7  | 2    | 9     |
| 8  | 1    | 0     |
| 9  | 2    | 5     |
---------------------
预期产出:

---------------------
| id | name | value |
---------------------
| 8  | mike | 0     |
| 2  | bill | 5     |
| 6  | john | 4     |
---------------------

我应该做什么样的联接,或者我应该如何编写查询?

以下查询获取具有最小值的所有行,但不存在另一个值在所选值下的调查

试试这个:

SELECT u.*, s.value
FROM survey s
JOIN users u
    ON s.uid = u.uid
WHERE NOT EXISTS(
    SELECT 'maximum'
    FROM survey s2
    WHERE s2.uid = s.uid
    AND s2.value < s.value)

您可以使用以下内容:

   select s.id, u.name, y.min_value 
    from
    (
      select uid, min(value) as min_value 
      from survey 
      group by uid 
    ) y 
    join survey s 
      on s.value = y.min_value 
      and s.uid = y.uid
    join user u 
      on u.uid = y.uid

我想这对你有帮助

SELECT * FROM SURVEY S
INNER JOIN  USERS U
ON S.UID=U.UID
QUALIFY ROW_NUMBER() OVER (PARTITION BY S.UID ORDER BY S.VALUE1 ASC )=1;

我将使用子查询从调查表返回所需的记录,并将其连接到用户表。该表可能有多达一百万条记录。子查询的速度不是很慢吗?这可能取决于索引的位置以及数据库服务器规范EXISTS子句对子查询中的表的减少扫描进行了优化问题是关于MySQL的。这看起来根本不像MySQL.SEL main。ID,main.UID,main.VALUE1来自SEL S.ID,S.UID,S.VALUE1,计数*为S.UID=B.UID和S.VALUE1>=B.VALUE1上调查的内部联接调查B中的行号S.ID,S.UID,S.VALUE1按S.ID分组,S.UID,S.VALUE1 main.UID=U.UID和行号=1请将其标记为已应答