我的表格内容:
id aid
----------
1 1
2 2
3 2
4 4
5 4
我的 sql:从表中选择计数(*),其中援助(1,2,3,4)按援助分组
结果:
count(*)
----------
1
2
2
我想要结果:
count(*)
----------
1
2
0
2
当援助为 1、2、3、4 时,我想要一个计数结果。我应该使用什么sql?感谢帮助。(我用的是 MySQL)</p>
-- your data
DECLARE @Data TABLE (Id int, Aid int)
INSERT INTO @Data VALUES
(1,1),
(2,2),
(3,2),
(4,4),
(5,4);
DECLARE @Relevant TABLE (Id int )
INSERT INTO @Relevant VALUES (1),(2),(3),(4);
-- the query
SELECT Relevant.Id, COUNT(Data.Aid)
FROM @Data Data
RIGHT JOIN @Relevant Relevant ON Data.Aid = Relevant.Id
GROUP BY Data.Aid, Relevant.Id
Hope this helps
SELECT COLUMN_VALUE, COUNT(BT.AID)
FROM SO_BUFFER_TABLE_15 BT, TABLE(SYS.DBMS_DEBUG_VC2COLl(1, 2, 3, 4))
WHERE BT.AID(+) = COLUMN_VALUE
GROUP BY COLUMN_VALUE
ORDER BY COLUMN_VALUE
是时候发表一个明显的声明了: - 数据不能“神奇地出现”,它需要存在于某个地方才能出现在输出中。
这与您对 for 计数的愿望0
有关aid = 3
。因为没有带 的记录aid = 3
,所以无法统计。它是不存在的数据,因此永远不会出现在输出中。所以我们需要强迫它存在。
如果您有一个列出所有aid
实体的表,那么使用LEFT JOIN
...
SELECT
aid.id,
COUNT(yourDataTable.aid) AS data_count
FROM
aid
LEFT JOIN
yourDataTable
ON aid.id = yourDataTable.aid
WHERE
aid.id IN (1,2,3,4)
GROUP BY
aid.id
(COUNT(yourDataTable.aid)
不计算字段所在的记录。NULL
所以3
现在存在,并且COUNT()
可以返回0
。)