-1

次のようなテーブルがある場合:

FRUIT
------------------------
GRANNY SMITH
BANNANA
CHERRY
RED DELICIOUS
DURIAN
FIG
GRAPE
LIME
ORANGE
BRAEBURN
TANGERINE
GRANNY SMITH
ORANGE
ORANGE
GRANNY SMITH
LIME
FIG
FIG
GRANNY SMITH
BRAEBURN

そして、SQL を使用して次の出力を生成したいのですが、どうすればよいですか? リンゴの下のさまざまなリンゴの品種の数を合計したいのですが、柑橘類の種類についても同じですが、それ以外はすべて数です。

FRUIT       COUNT
----------- ------
APPLE       7
BANNANA     1
CHERRY      1
CITRUS      6
DURIAN      1
FIG         3
GRAPE       1

ネストされた集計を条件付きで使用しようとしましたが、ネストされた集計は SQL でサポートされていないため、他のアイデアを探しています。

4

5 に答える 5

1

既存の CASE ステートメントを GROUP BY できますが、派生テーブルを使用する必要があります (または GROUP BY でその巨大な CASE を繰り返します)。

select FRUIT, COUNT(*)
from 
 (
   select CASE 
             WHEN FRUIT IN ('GRANNY SMITH', 'RED DELICIOUS', ...) THEN 'APPLE'
             WHEN FRUIT IN ('ORANGE', 'TANGERINE', ...) THEN 'CITRUS'
             ELSE FRUIT
          END AS FRUIT
   from tab
 ) dt
group by FRUIT
order by FRUIT
于 2015-04-02T21:58:27.737 に答える
0

これが私がそれを行う方法です。FRUIT_LOOKUP をテーブルにすることもできますが、その必要はありません。次のようにクエリで仮想的に作成できます。

WITH FRUIT_LOOKUP AS
(
   SELECT 'GRANNY SMITH' AS FRUIT, 'APPLE' AS FTYPE
   UNION ALL
   SELECT 'BANNANA' AS FRUIT, 'BANNANA' AS FTYPE
   UNION ALL
   SELECT 'CHERRY' AS FRUIT, 'CHERRY' AS FTYPE
   UNION ALL
   SELECT 'RED DELICIOUS' AS FRUIT, 'APPLE' AS FTYPE
   UNION ALL
   SELECT 'DURIAN' AS FRUIT, 'DURIAN' AS FTYPE
   UNION ALL
   SELECT 'FIG' AS FRUIT, 'FIG' AS FTYPE
   UNION ALL
   SELECT 'GRAPE' AS FRUIT, 'GRAPE' AS FTYPE
   UNION ALL
   SELECT 'LIME' AS FRUIT, 'CITRUS' AS FTYPE
   UNION ALL
   SELECT 'TANGERINE' AS FRUIT, 'CITRUS' AS FTYPE
   UNION ALL
   SELECT 'BRAEBURN' AS FRUIT, 'APPLE' AS FTYPE
   UNION ALL
   SELECT 'ORANGE' AS FRUIT, 'CITRUS' AS FTYPE
)
SELECT FL.FTYPE AS FRUIT, COUNT(*) AS COUNT
FROM FRUITTABLE F
JOIN FRUIT_LOOKUP FL ON F.FRUIT = FL.FRUIT
GROUP BY FL.FTYPE
于 2015-04-02T21:36:33.660 に答える
0

テーブルに FruitCategory 列を追加する必要があります。

Fruit          FruitCategory
----------------------------
GRANNY SMITH   APPLE
BANNANA        BANNANA
BRAEBURN       APPLE
...

次に、FruitCategory でグループ化できます

SELECT FruitCategory, COUNT(*) AS [Count]
FROM tblFruit
GROUP BY FruitCategory
ORDER BY FruitCategory

ただし、別の果物カテゴリ テーブルを用意することをお勧めします。

FruitCategoryID FruitCategory
-----------------------------
1               Apple
2               Banana
...

次に、Fruit テーブルを次のように変更します。

Fruit          FruitCategoryID
------------------------------
GRANNY SMITH   1
BANNANA        2
BRAEBURN       1
...

これにより、カテゴリ テーブルをコンボ ボックスなどのルックアップとして使用でき、より堅牢になります。カテゴリ名を直接フルーツ テーブルに書き込むとエラーが発生しやすくなります。

SELECT
    c.FruitCategory, COUNT(*) AS [Count]
FROM
    tblFruit f
    INNER JOIN tblFruitCategory c
        ON f.FruitCategoryID = c.FruitCategoryID
GROUP BY
    f.FruitCategoryID
ORDER BY
    c.FruitCategory
于 2015-04-02T21:25:34.160 に答える