Mysql SQL-从联接查询中选择discint和count
我有以下疑问:Mysql SQL-从联接查询中选择discint和count,mysql,sql,join,database-design,Mysql,Sql,Join,Database Design,我有以下疑问: 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
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
从我的数据库中选择一些数据。上面的查询工作正常。但是,我还想从xeon\u users\u租借的中选择count(*)
,其中user\u 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
然而,这给了我作为ttl
租用的xeon\u users\u中的总行数,而不是username=user\u by
的总行数,我认为只要稍微修改一下子查询,就可以做你想做的事情。也就是说,将选择distinct
更改为分组依据
:
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;
一些注意事项:
selectdistinct
实际上不是必需的,因为您可以使用groupby
执行相同的逻辑。因此,了解分组方式
更为重要
- 您正在使用
限制
,没有订单依据
。这意味着您可以在每次运行查询时获得一组不同的行。坏习惯
你试过选择计数(区分(UsSeriBy)),如果你喜欢,考虑下面这个简单的两步过程:1。如果您还没有这样做,请提供适当的CREATE和INSERT语句(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果尚未这样做,请提供与步骤1中提供的信息相对应的所需结果集。