2017-08-04 13 views
0

私のデータベースは、このようなものであるが、これはデモであれば後:使用してグループ化し、ケース文がSQLクエリで

id | pkg_name | pkg_value 
1 | package 1 | 1200 
2 | package 2 | 1200 
3 | package 3 | 1200 
4 | package 4 | 1200 
5 | master | 1400 
6 | master | 1500 

そして、ここでは、私が照会したいものです。

  1. 1場合アイテムは2回以上カウントされます。
  2. 1回のみ記載されている場合は、1とカウントされます。

このクエリを作成するのを手伝ってください!私はすべてのフィールドとグループをカウントするために作成さ

クエリは以下の通りです:高度で

SELECT pkg_name, count(*) from packages GROUP by pkg_name 

感謝。

+0

私は結果が必要ですAl Package_valueの数 –

答えて

1
SELECT 
    pkg_name, 
    IF(COUNT(*)<=2, COUNT(*), 2) AS total 
from packages GROUP by pkg_name 

これは動作するはずですが、二回のカウントを実行しない、より最適化されたバージョンがありそうです。

+0

カウントは2回実行されるのではなく、1回だけキャッシュされ、どこかにキャッシュされてから2回評価されると思います。 –

+0

@TimBiegeleisenありがとう;私が恐れていたほど非効率ではないかもしれないと思います。 – BeetleJuice

+0

ありがとうございます。 それは私が私がの結果数で得ることができる方法pkg_pkg_value により、パッケージ・グループからの総 AS(2、COUNT(*)<= 2、COUNT(*)) このよう pkg_valueを選択、 IFを更新 –

0

CASE式を使用すると、基本となるカウントが1の場合は1に、それ以外の場合は2以上に2にマップされます。

SELECT 
    pkg_name, 
    CASE WHEN COUNT(*) = 1 THEN 1 ELSE 2 END AS pkg_cnt 
FROM packages 
GROUP BY 
    pkg_name 
+0

Date Insted pkg_nameは何ですか? その仕事? –

+0

テーブルに日付列がないので、私はあなたの質問に従わない。私が与えた一般的なクエリは、あなたが書いたクエリが有効であると仮定して、_any_ groupingカラムで動作します。 –

関連する問題