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请将其标记为已应答