1

我的表格内容:

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>

4

3 回答 3

1
-- 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
于 2012-08-09T08:47:06.453 回答
0

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

于 2012-08-09T09:01:16.597 回答
0

是时候发表一个明显的声明了: - 数据不能“神奇地出现”,它需要存在于某个地方才能出现在输出中。

这与您对 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。)

于 2012-08-09T08:46:47.373 回答