SQL计数记录等于1个值并对其余值进行计数和分组

时间:2014-06-25 22:17:55

标签: mysql sql database count group-by

我遇到了需要编写的查询问题。出于某种原因,我似乎无法得到任何工作。我知道解决方案非常简单,但我似乎无法想到它。

假设我在我的数据库中有一个名为&#34的表;他告诉"看起来像这样:

ID  |  Item  |  value
------------------------------
1  |  item 1  |  3
2  |  item 1  |  4
3  |  item 1  |  3
4  |  item 2  |  3
5  |  item 3  |  3
6  |  item 1  |  3
7  |  item 1  |  3
8  |  item 1  |  3
9  |  item 4  |  3
10 |  item 4  |  6

我想计算项目1出现的时间值= 3然后将其他项目组合在一起可以为他们提供= 3的计数,例如此表格的输出将为

  Item  |  Count
---------------------
Item 1  |  5
Other   |  3

当项目1出现5次时,值为3,所有其他值为3的项目组合在一起并显示为其他项目,计数为3

3 个答案:

答案 0 :(得分:2)

聚合的关键是case语句。然后你还需要计算适当的值。在MySQL中,你可以这样做:

SELECT (CASE WHEN Item = 'item 1' THEN Item ELSE 'Other' END) AS Item, COUNT(*) AS `Count3`
FROM entrys e
WHERE value = 3
GROUP BY Item;

MySQL允许在GROUP BY中使用列别名。如果你想要所有的数量,其中值是3,那么你可以这样做:

SELECT (CASE WHEN Item = 'item 1' THEN Item ELSE 'Other' END) AS Item,
       COUNT(*) as AllCount, SUM(value = 3) as Count3
FROM entrys e
GROUP BY Item;

答案 1 :(得分:1)

尝试使用派生表,其中您的商品名为Item1Other。然后按名称对派生表进行分组并选择计数。

SELECT
    Item,
    COUNT(*)
FROM (
  SELECT
    (CASE
        WHEN Item = 'item 1'
        THEN 'Item 1'
        ELSE 'Other'
    END) Item
  FROM items
  WHERE value = 3) t1
GROUP BY Item

答案 2 :(得分:0)

SELECT CASE Item WHEN 'item 1' THEN Item ELSE 'Other' END AS Item, COUNT(ID) AS `Count`
FROM entrys
GROUP BY CASE Item WHEN 'item 1' THEN Item ELSE 'Other' END