我有以下查询:
SELECT u.*
(SELECT sum(trs.amount)
FROM transactions trs
WHERE u.id = trs.user AND trs.type = 'Recycle' AND
trs.TIME >= UNIX_TIMESTAMP(CURDATE())
) as amt
FROM (SELECT DISTINCT user_by
FROM xeon_users_rented
) AS xur JOIN
users u
ON xur.user_by = u.username
LIMIT 50
从我的数据库中选择一些数据。以上查询工作正常。不过,我想还从count(*)
中选择xeon_users_rented
user_by = u.username
这就是我的尝试:
SELECT u.*
(SELECT sum(trs.amount)
FROM transactions trs
WHERE u.id = trs.user AND trs.type = 'Recycle' AND
trs.TIME >= UNIX_TIMESTAMP(CURDATE())
) as amt,
(SELECT DISTINCT count(*)
FROM xeon_users_rented
WHERE xur.user_by = u.username
) AS ttl
FROM (SELECT DISTINCT user_by
FROM xeon_users_rented
) AS xur JOIN
users u
ON xur.user_by = u.username
LIMIT 50
但是,这会在xeon_users_rented
中为ttl
提供总行数,而不是username = user_by
答案 0 :(得分:0)
我认为你可以通过修改你的子查询来做你想做的事。也就是说,将select distinct
更改为group by
:
SELECT u.*, xur.cnt,
(SELECT sum(trs.amount)
FROM transactions trs
WHERE u.id = trs.user AND trs.type = 'Recycle' AND
trs.TIME >= UNIX_TIMESTAMP(CURDATE())
) as amt
FROM (SELECT user_by, COUNT(*) as cnt
FROM xeon_users_rented
GROUP BY user_by
) xur JOIN
users u
ON xur.user_by = u.username
LIMIT 50;
一些注意事项:
SELECT DISTINCT
不是必需的,因为您可以使用GROUP BY
执行相同的逻辑。因此,了解GROUP BY
。LIMIT
而没有ORDER BY
。这意味着每次运行查询时都可以获得不同的行集。不好的做法。