2016-10-12 30 views
1

カラムの特定の値をカウントしたい。構造はこのように見えます。カラムの大文字小文字を「文字列」にする

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 

カウントはOKですが、タイプが間違っていると「野菜」になります。 ここで何が間違っていますか?たぶん、ソリューションは非常にシンプルですが、私はそれを見ていない。

+0

あなたは状態はまた、その後、ここ – dev

答えて

3

試してください:FieldValueはあなたがselect句で使用していた分野である一方で、あなたの元のクエリでは、あなたが、FieldNameなくFieldValueによってグループ化されたこと

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

注意してください。

MySQLを使用している場合は、集計されていない列がgroup by句に含まれていない集計関数を使用できることに注意してください。これは、OracleやMS SQL Serverのような他のRDBMSにエラーを投げますが、MySQLでは何が起きているのか不思議に思っています。

MySQL Aggregate Functions without GROUP BY clause

+0

はいはこの1つの仕事をした際にケースを使用する必要がないところでFIELDVALUEをチェックする必要があります。私はMySQLだけを使用しています。私はWHERE句で 'value'を使うことができるのか分からなかった。大きなありがとう! – user3676298