[英]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_id
的photo_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.