我想对列中的某个值进行计数。结构看起来像这样;
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
计数没问题,但类型错了它应该是'蔬菜'。 我在这做错了什么?也许解决方案非常简单,但我只是没有看到它。
答案 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中它只会让您不知道发生了什么。