![](/img/trans.png)
[英]How to get count of columns that are having null values for a given row in sql?
[英]SQL null row and COUNT
我有一張桌子
id | url | albumID
------------------
1 | null | 1
2 | null | 1
3 | null | 2
4 | null | 5
和評論表
id | text | imageID
------------------
1 | 'xD' | 1
2 | ':)' | 1
3 | ':P' | 1
4 | '(_!_)' | 2
我想獲取所有具有albumID = 1的圖像,以及具有與先前結果匹配的imageID的評論數。
SELECT images.id, COUNT(comments.imageID) AS comments FROM images
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=1
我得到:
id | comments
------------------
1 | 3
可以,但是當我嘗試搜索不存在albumID的圖像時:
SELECT images.id, COUNT(comments.imageID) AS comments FROM images
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3
我得到:
id | comments
------------------
null | 0
我不想得到null的結果。 那么我的查詢出了什么問題?
編輯:
解決方案1
@cdaiga和@isaace提供,謝謝
SELECT images.id, COUNT(comments.imageID) AS comments FROM images
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3
GROUP BY images.id;
解決方案2
我自己思考之后,但我不確定該解決方案的性能如何
SELECT images.id,
(
SELECT COUNT(*) FROM comments WHERE comments.imageID=images.id
) AS comment FROM images
WHERE images.albumID=3
通常,當您運行時:
SELECT images.id FROM images
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3;
結果是一個空集。 但是運行:
SELECT images.id, COUNT(comments.imageID) AS comments FROM images
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3;
返回一個空值,計數為零,因為計數不用作聚合函數。 為了獲得正確的結果,您必須通過添加group by子句將count用作聚合函數。
SELECT images.id, COUNT(comments.imageID) AS comments FROM images
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3
GROUP BY images.id;
通常,當您運行時:
SELECT images.id FROM images
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3;
結果是一個空集。 但是運行:
SELECT images.id, COUNT(comments.imageID) AS comments FROM images
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3;
返回一個空值,計數為零,因為計數未與聚合一起使用。 為了獲得正確的結果,您必須通過添加group by子句將count用作聚合函數。
SELECT images.id, COUNT(comments.imageID) AS comments FROM images
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3
GROUP BY images.id;
如果添加GROUP BY
則應該對其進行修復。
SELECT images.id, COUNT(comments.imageID) AS comments FROM images
LEFT JOIN comments ON comments.imageID=images.id
WHERE images.albumID=3
GROUP BY images.id
在更高版本的mysql
,如果沒有GROUP BY
將無法運行查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.