SQL returns 多列的子查询
SQL subquery that returns more than one column
我正在尝试执行我认为很简单的 SQL 语句,但是当我尝试使用子查询时收到一条错误消息,指出多个列正在被 returned ,但我需要不止一列才能 returned。
我只是想显示两列,我的用户名和他们当前的余额
这里是 SQL:
SELECT playid, username, balance FROM plays order by playid desc limit 25
哪个 returns:
Play ID Username Balance
593 ken -3497
592 cass -204
591 cass -184
590 cass -164
589 ken -517
580 ken -837
579 sam 250
545 cass -134
544 cass -114
这正是我想要的。我的所有成员及其余额的列表。现在我需要 运行 这个查询的子查询,只有 select 具有最高 ID 的余额(最近的余额)这将 return 一个 table 像这样:
Play ID Username Balance
593 ken -3497
592 cass -204
579 sam 250
最近的余额是我唯一关心的事情。当我尝试执行第二个查询时,我收到一条错误消息,提示我正在尝试 return 多列。 (我当然是)
如有任何帮助,我们将不胜感激。
编辑:您现在提到这是针对 MySQL 的。试试这个:
SELECT
p1.playid,
p1.username,
p1.balance
FROM
plays p1
JOIN
(
SELECT
MAX(playid) AS playid,
username
FROM
plays
GROUP BY
username
) p2
ON (p2.username = p1.username)
AND (p2.playid = p1.playid);
-
这可能就是您要找的。我假设你想要最近的余额 by username based on the play id:
SELECT
playid,
username,
balance
FROM
(
SELECT
playid,
username,
balance,
ROW_NUMBER() OVER(PARTITION BY username ORDER BY playid DESC) AS seq
FROM
plays
) base
WHERE
seq = 1
这按用户名对记录进行排序,按 playid 降序排列,然后 returns 每个记录的最新记录。
我正在尝试执行我认为很简单的 SQL 语句,但是当我尝试使用子查询时收到一条错误消息,指出多个列正在被 returned ,但我需要不止一列才能 returned。
我只是想显示两列,我的用户名和他们当前的余额
这里是 SQL:
SELECT playid, username, balance FROM plays order by playid desc limit 25
哪个 returns:
Play ID Username Balance
593 ken -3497
592 cass -204
591 cass -184
590 cass -164
589 ken -517
580 ken -837
579 sam 250
545 cass -134
544 cass -114
这正是我想要的。我的所有成员及其余额的列表。现在我需要 运行 这个查询的子查询,只有 select 具有最高 ID 的余额(最近的余额)这将 return 一个 table 像这样:
Play ID Username Balance
593 ken -3497
592 cass -204
579 sam 250
最近的余额是我唯一关心的事情。当我尝试执行第二个查询时,我收到一条错误消息,提示我正在尝试 return 多列。 (我当然是)
如有任何帮助,我们将不胜感激。
编辑:您现在提到这是针对 MySQL 的。试试这个:
SELECT
p1.playid,
p1.username,
p1.balance
FROM
plays p1
JOIN
(
SELECT
MAX(playid) AS playid,
username
FROM
plays
GROUP BY
username
) p2
ON (p2.username = p1.username)
AND (p2.playid = p1.playid);
- 这可能就是您要找的。我假设你想要最近的余额 by username based on the play id:
SELECT
playid,
username,
balance
FROM
(
SELECT
playid,
username,
balance,
ROW_NUMBER() OVER(PARTITION BY username ORDER BY playid DESC) AS seq
FROM
plays
) base
WHERE
seq = 1
这按用户名对记录进行排序,按 playid 降序排列,然后 returns 每个记录的最新记录。