【问题标题】:Sum of two tables with subqueries带有子查询的两个表的总和
【发布时间】:2014-01-27 10:26:46
【问题描述】:

我有问题

SELECT c.user_id, 
   (SELECT COUNT(*) FROM jos_findme_bestof b WHERE b.user_id = c.user_id) as bCount,
   (SELECT COUNT(*) FROM jos_findme_pair   p WHERE p.user_id = c.user_id) as pCount,
   (SELECT COUNT(*) FROM jos_findme_style  s WHERE s.user_id = c.user_id) as sCount,

FROM   jos_findme c

如何使用:bCount + pCount + sCount 创建一列?

谢谢

【问题讨论】:

    标签: mysql sql select sum left-join


    【解决方案1】:

    如果要在查询中添加列:

       SELECT *,(bCount+pCount+sCount) as sumCount FROM(
        SELECT c.user_id, 
           (SELECT COUNT(*) FROM jos_findme_bestof b WHERE b.user_id = c.user_id) as bCount,
           (SELECT COUNT(*) FROM jos_findme_pair   p WHERE p.user_id = c.user_id) as pCount,
           (SELECT COUNT(*) FROM jos_findme_style  s WHERE s.user_id = c.user_id) as sCount,
    
        FROM   jos_findme c)
    

    【讨论】:

      【解决方案2】:

      试试这个

      SELECT SUM(t.bCount+t.pCount+t.sCount) As TotalCount , t.user_id
      FROM (
      SELECT c.user_id as user_id, 
         (SELECT COUNT(*) FROM jos_findme_bestof b WHERE b.user_id = c.user_id) as bCount,
         (SELECT COUNT(*) FROM jos_findme_pair   p WHERE p.user_id = c.user_id) as pCount,
         (SELECT COUNT(*) FROM jos_findme_style  s WHERE s.user_id = c.user_id) as sCount
      FROM jos_findme c ) t ;
      

      【讨论】:

        【解决方案3】:

        试试这个:

        SELECT c.user_id, 
              (IFNULL(b.bCount, 0) + IFNULL(p.pCount, 0) + IFNULL(s.sCount, 0)) AS totalCount
        FROM jos_findme c
        LEFT JOIN (SELECT b.user_id, COUNT(1) bCount 
                   FROM jos_findme_bestof b 
                   GROUP BY b.user_id 
                 ) AS b ON b.user_id = c.user_id 
        LEFT JOIN (SELECT p.user_id, COUNT(1) pCount 
                   FROM jos_findme_pair p 
                   GROUP BY p.user_id 
                 ) AS p ON p.user_id = c.user_id 
        LEFT JOIN (SELECT s.user_id, COUNT(1) sCount 
                   FROM jos_findme_style s 
                   GROUP BY s.user_id
                 ) AS s ON s.user_id = c.user_id 
        

        【讨论】:

          【解决方案4】:

          你可以试试这个

          SELECT c.user_id, sum(b.count(*)+p.count(*)+s.count(*)) as totalcount 
              from jos_findme c 
              join  jos_findme_bestof b 
                  on b.user_id = c.user_id 
              join jos_findme_pair p 
                  on p.user_id = c.user_id 
              join jos_findme_style  s 
                  on s.user_id = c.user_id
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-12-16
            • 2019-10-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多