计算列

时间:2016-10-12 12:15:14

标签: mysql

我想对列中的某个值进行计数。结构看起来像这样;

FieldName       FieldValue
food            fruit
food            fruit
food            fruit
food            vegetable

MySQL查询如下所示:

SELECT `FieldValue` AS `type`,
COUNT(case when `FieldValue` = 'fruit' then 1 end)AS `counts`
FROM `mytable`
WHERE `FieldName` LIKE '%food%' 
GROUP BY `FieldName`

它返回的就是OK:

type        counts
fruit       3

但是当我把“水果”变成“蔬菜”时:

SELECT `FieldValue` AS `type`,
COUNT(case when `FieldValue` = 'vegetable' then 1 end)AS `counts`
FROM `mytable`
WHERE `FieldName` LIKE '%food%' 
GROUP BY `FieldName`

我得到了回复:

type        counts
fruit       1

计数没问题,但类型错了它应该是'蔬菜'。 我在这做错了什么?也许解决方案非常简单,但我只是没有看到它。

1 个答案:

答案 0 :(得分:3)

尝试:

SELECT `FieldValue` AS `type`,
COUNT(*)AS `counts`
FROM `mytable`
WHERE `FieldName` LIKE '%food%' and `FieldValue` = 'vegetable'
GROUP BY `FieldValue`

请注意,在原始查询中,您按FieldName而不是FieldValue进行分组,而FieldValue是您在select子句中使用的字段。

如果您使用的是MySQL,您应该知道它允许您使用聚合函数,其中非聚合列不在group by子句中。这将在其他RDBMS(例如Oracle和MS SQL Server)中引发错误,但在MySQL中它只会让您不知道发生了什么。

MySQL Aggregate Functions without GROUP BY clause