【问题标题】:Return row from subselect从子选择返回行
【发布时间】:2011-02-18 01:24:53
【问题描述】:

我有这个 MySQL 数据库方案:

users (id, login)
coins (userid, value, curr)

我需要编写返回结果的选择:登录名和他拥有的最大硬币以及该硬币的货币。

我尝试过类似的方法:

SELECT login, 
(
  SELECT value, curr
  FROM coins 
  WHERE coins.userid = users.id
  ORDER BY value DESC
  LIMIT 1
) AS ROW(value, curr)
FROM users

它不起作用...我会收到错误消息,即“操作数应包含 1 列”。 我期待它,但我不知道怎么做。

所以我猜:有没有办法将多列单行(行)从子查询返回到父查询?

(是的,我可以使用两个子查询,但它不起作用。)

感谢您的宝贵时间。

【问题讨论】:

  • 如果有平局(一个用户有2个相同价值的硬币)怎么办?
  • 感谢您的回答。它帮助了我。我的意思是没有关系的情况。

标签: mysql select subquery


【解决方案1】:
SELECT u.login, g.MaxVal, c.curr
FROM users u JOIN coins c ON u.id = c.userid 
  JOIN (
    SELECT userid, MAX(`Value`) MaxVal
    FROM coins
    GROUP BY userid
  ) g ON c.userid = g.userid AND c.Value = g.MaxVal 

在平局的情况下,上述查询将返回所有价值最高的硬币,如果您只想选择其中的一种,可以在外部查询中添加GROUP BY

SELECT u.login, g.MaxVal, c.curr
FROM users u JOIN coins c ON u.id = c.userid 
  JOIN (
    SELECT userid, MAX(`Value`) MaxVal
    FROM coins
    GROUP BY userid
  ) g ON c.userid = g.userid AND c.Value = g.MaxVal 
GROUP BY c.userid

【讨论】:

    猜你喜欢
    • 2019-01-17
    • 2018-09-24
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    相关资源
    最近更新 更多