SQL - 从JOIN查询中选择discint AND count

时间:2015-10-17 09:57:42

标签: 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
          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

的总行数

1 个答案:

答案 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。这意味着每次运行查询时都可以获得不同的行集。不好的做法。