簡體   English   中英

在左聯接位置的MySQL COUNT

[英]MySQL COUNT in LEFT JOIN WHERE

我不是專家,在回答我的問題時請記住這一點...我已經閱讀了很多關於stackoverflow的示例,但是我根本不了解如何在任務中使用它。

我有一個相冊數據庫表和一個照片數據庫表:

table_album:

album_id   album_creatoruser_id
-------------------------------
   1           777
   2           777
   3           777

table_photos:

photo_id   photo_album_id
-------------------------
   1            1
   2            1
   3            1
   4            1
   5            2
   6            2
   7            3
   8            3
   9            3

現在,在我的示例album_creatoruser_id=777 ,我想獲取由用戶創建的所有照片的總和

我敢肯定,可以直接在MySQL中使用一個查詢或子查詢,或者使用LEFT JOIN或GROUP BY,但是由於我不了解建立此查詢的邏輯,所以無法正常工作。

任何幫助如何計算已創建的特定album_creatoruser_id所有album_idphoto_id行的方法都不錯!

簡而言之: album_creatoruser_id 777獲得了多少張照片?

子查詢的第一種可能性,是用戶777創建的所有照片的計數:

 SELECT 
      COUNT(*)
 FROM photo
 WHERE
      photo_album_id IN 
      (
           SELECT album_id 
           FROM album 
           WHERE album_creatoruser_id = 777
      )

其他:

 SELECT 
     COUNT(*)
 FROM photo p, album a
 WHERE 
     p.photo_album_id = a.album_id 
     AND a.album_creatoruser_id = 777

並加入

 SELECT 
      COUNT(*)
 FROM photo p 
 JOIN album a
 ON p.photo_album_id = a.album_id     
 WHERE 
      a.album_creatoruser_id = 777

這里不需要分組,因為我們不想分組顯示數據。

您的基本查詢是:

   SELECT COUNT(*)
     FROM table_album ta
     JOIN table_photo tp
       ON tp.photo_album_id = ta.album_id     
    WHERE album_creatoruser_id = **input**

我建議運行以下查詢以了解其工作原理:

   SELECT *
     FROM table_album ta
     JOIN table_photo tp
       ON tp.photo_album_id = ta.album_id

將在條件tp.photo_album_id = ta.album_id下返回table_album所有行及其各自的table_photo記錄。

   SELECT *
     FROM table_album ta
     JOIN table_photo tp
       ON tp.photo_album_id = ta.album_id
    WHERE album_creatoruser_id = **input**

將這些行過濾為僅album_creatoruser_id = **input**那些行。

   SELECT COUNT(*)
     FROM table_album ta
     JOIN table_photo tp
       ON tp.photo_album_id = ta.album_id
    WHERE album_creatoruser_id = **input**

計算這些行,返回一個聚合行( COUNT()是一個聚合函數,如SUM()MAX() ),其結果是,由於只有一個組,因此不需要GROUP BY 所有過濾的行。

如果您希望所有album_creatoruser_id與各自的計數相同,我建議:

   SELECT album_creatoruser_id, COUNT(*)
     FROM table_album ta
     JOIN table_photo tp
       ON tp.photo_album_id = ta.album_id
 GROUP BY album_creatoruser_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM