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中提供的信息相对应的所需结果集。