按计数分组()

时间:2012-08-09 08:36:58

标签: mysql sql

我的表格内容:

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)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

明确陈述的时间: - 数据不能“神奇地出现”,它需要存在于某处才能显示在输出中。

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

答案 2 :(得分:0)

希望这有帮助


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