我有下表,我試圖找到每個唯一name元素的總數。問題是,other: 1并且other: Null應該是不同的元素,但我的查詢將它們組合在一起。我遇到的問題是這null不被算作一行。但是當我使用count(*),other: 1和other: Null組合在一起時。
| 名稱 | ID | 組 ID |
|---|---|---|
| 其他 | 1 | 8 |
| 其他 | 空值 | 8 |
| 2 | 8 | |
| 谷歌 | 3 | 8 |
| 2 | 8 |
目標是回傳:
[{Other: 1}, {Other: 1}, {Facebook: 2}, {Google: 1}]
我試過了:
SELECT name, count(id)
FROM table
WHERE id IS NOT NULL
AND groupId='${id}'
GROUP BY name
UNION
SELECT name, count(*)
FROM table
WHERE id IS NULL
AND groupId ='${id}'
GROUP BY name
和:
SELECT name, count(id)
FROM table
WHERE id='${id}'
GROUP BY name
我將如何獲得上面所需的回傳值?
uj5u.com熱心網友回復:
您似乎希望每個名稱和 ID 有一個結果行,因此不要僅按名稱分組,而是按名稱和 ID 分組:
SELECT name, COUNT(*)
FROM table
WHERE groupId = '${id}'
GROUP BY name, id
ORDER BY name, id;
由于您不想在結果中顯示 ID,請從 select 子句中省略它。
uj5u.com熱心網友回復:
您沒有按ID分組
我想你需要的是
SELECT name, count(*)
FROM table
WHERE Groupid='${id}'
GROUP BY name, Id
uj5u.com熱心網友回復:
如果使用標志列的檢查id是null對GROUP BY:
SELECT name,
id IS NULL null_flag,
COUNT(*) count
FROM tablename
WHERE groupId = '${id}'
GROUP BY name, null_flag;
或者,如果您不希望它出現在結果中:
SELECT name, COUNT(*) count
FROM tablename
WHERE groupId = '${id}'
GROUP BY name, id IS NULL;
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/399479.html
標籤:sql PostgreSQL的
上一篇:根據前一行的值洗掉表的重復行
下一篇:排除與另一行具有相似列的行
