MySQL按最大值分组

MySQL按最大值分组,sql,mysql,Sql,Mysql,示例表(many2many=用户有多个ticker,ticker有多个用户): 我必须为每个股票代码选择具有最大相关性的用户-因此,对于每个股票代码,一个具有最佳相关性的用户。 你会怎么做呢?像这样的事情应该可以: SELECT FROM users u INNER JOIN users_tickers ut ON ut.user_id=u.id WHERE NOT EXISTS( SELECT FROM users u1 INNER JOIN users_tickers u

示例表(many2many=用户有多个ticker,ticker有多个用户):

我必须为每个股票代码选择具有最大相关性的用户-因此,对于每个股票代码,一个具有最佳相关性的用户。
你会怎么做呢?

像这样的事情应该可以:

SELECT FROM users u 
INNER JOIN users_tickers ut ON ut.user_id=u.id
WHERE NOT EXISTS(
    SELECT FROM users u1 
    INNER JOIN users_tickers ut1 ON ut1.user_id=u1.id 
    WHERE ut1.ticker_id=ut.ticker_id AND u1.relevance > u.relevance
)

下面是我在T-SQL中的实现方法。我不熟悉MySQL的方言

SELECT * FROM users AS U
INNER JOIN user_tickers t ON t.user_id = U.user_id
WHERE U.RELEVANCE = (
SELECT MAX(RELEVANCE) FROM users as usub WHERE U.user_id = usub.user_id
)
ORDER BY U.relevance DESC

Produces:
user_id relevance    user_id    ticker_id
1                 10         1        2
1                 10         1        3
3                  8         3        2
2                  6         2        4
2                  6         2        1
2                  6         2        3
4                  3         4        2

我认为你可以做到这一点:

 SELECT *, 
(SELECT U2.user_id FROM users as U2, users_tickers as UT2 
  WHERE UT2.ticker_id = T1.ticker_id
  AND UT2.user_id = U2.user_id
  ORDER BY U2.relevance
  LIMIT 1) 
FROM  tickers as T1  
我不知道这是否是好代码,但我认为这是您正在寻找的。上次我做SQL时,每个人都说连接很慢,请使用子查询。不知道这是否仍然适用

编辑:我在MySQL中使用您提供的值(和一个添加的tickers表)对其进行了测试,结果证明它是有效的

编辑:当然,您可以通过更改限制1来更改“n”用户。。。限制

SELECT * FROM users_tickers LEFT JOIN users ON users.id = users_tickers.user_id WHERE ticker_id = 2 ORDER BY relevance DESC LIMIT 1;

这将为您提供所需的特定股票代码的信息。这就是你想要的吗?或者是最相关用户的完整列表?

我正在寻找一个快速sql。我是这样做的

SELECT * 
FROM (
    SELECT id, relevance, ticker_id 
    FROM `users` 
    INNER JOIN users_tickers ON users_tickers.user_id=users.id 
    ORDER BY users.relevance DESC, users.created_at DESC
) AS X 
GROUP BY ticker_id 
ORDER BY relevance DESC 
LIMIT 0,10

还远未达到最佳状态:)。

您需要选择相关性最大的用户,或者选择相关性最大的前n名用户?相关性最大的前n名用户。因此,对于每个现有的股票代码,我需要一个具有最大相关性的用户。这将选择股票代码而不是用户。但这是您所说的:“因此对于每个现有的股票代码,我需要一个具有最大相关性的用户。”您可以发布一个示例结果表,以便我们知道它应该是什么样子吗?您的结果中有重复的股票代码。当然。它们在样本数据中重复出现。我们如何知道哪个股票代码是正确的?user_ticker表表示多对多关系。id为1的用户有两个标记,用户2有3,等等。。。是否只需要最高的ticker_id值?最低的?
SELECT * 
FROM (
    SELECT id, relevance, ticker_id 
    FROM `users` 
    INNER JOIN users_tickers ON users_tickers.user_id=users.id 
    ORDER BY users.relevance DESC, users.created_at DESC
) AS X 
GROUP BY ticker_id 
ORDER BY relevance DESC 
LIMIT 0,10