10

次の表に3つの数値フィールドがあると仮定します。

Images (table)
--------------
Width
Height
Amount

幅と高さはミリメートル単位の画像サイズです。次に、センチメートル単位の寸法でグループ化された画像の量に関するレポートを作成します。これは、2つの存在しない列でGROUPBYする必要があることを意味します。

できます:

SELECT      ROUND(Width/10,0)   AS W
        ,   ROUND(Height/10,0)  AS H
        ,   SUM(Amount)         AS A 
FROM        IMAGES
GROUP BY    Width
        ,   Height 
ORDER BY    W
        ,   H
        ,   A

ただし、これはビューレベルでのみmmからcmへの変換を行い、同じ寸法に対して複数の行になります。

例えば

 W   H  A
--- --- - 
150 159 2
150 160 1

1つのカテゴリにはなりません

W  H  A
-- -- - 
15 16 3

しかしで

W  H  A
-- -- - 
15 16 2
15 16 1

対象となるエンジンは実際にはFileMakerデータベースであり、残念ながらGROUPBY句内の集計関数をサポートしていないようです。

4

3 に答える 3

8

単純GROUP BYに計算された列:

SELECT 
    ROUND(Width/10,0) as W
    ,ROUND(Height/10,0) as H
    ,COUNT(*) as A -- You may replace this with SUM(Amount) too
FROM 
    IMAGES
GROUP BY 
    ROUND(Width/10,0)
    ,ROUND(Height/10,0)
ORDER BY 
    W
    ,H
    ,A

編集:また、あなたの質問について私が理解していることから、行ではCOUNTなくSUM...、そうですか?

于 2012-05-01T14:25:45.403 に答える
2

次のクエリはCommon Table Expression (CTE)、幅と高さをmmからcmに丸めて変換し、派生テーブル出力を生成するために使用します。次に、このCTE出力を使用して、幅と高さの値をグループ化し、金額列の合計を計算します。

SUM金額欄を探していたのか、金額欄を探していたのかわかりませんCOUNT。私はあなたの質問に基づいてSUMを仮定しました。COUNTのみが必要な場合は、クエリのSUMをCOUNTに変更してください。

SQL Fiddleでデモを表示するには、ここをクリックしてください

スクリプト

CREATE TABLE images
(
        width   INT     NOT NULL
    ,   height  INT     NOT NULL
    ,   amount  FLOAT   NOT NULL
);

INSERT INTO images (width, height, amount) VALUES
    (150, 159, 1),
    (150, 159, 2),
    (150, 158, 1),
    (150, 159, 3),
    (150, 158, 2),
    (160, 158, 4),
    (160, 158, 1);

;WITH imagesincm AS
(
    SELECT      ROUND(width  / 10,0)    AS W
            ,   ROUND(height / 10,0)    AS H
            ,   amount
    FROM        images
) 
SELECT      W
        ,   H
        ,   COUNT(amount) AS A
FROM        imagesincm
GROUP BY    W
        ,   H 
ORDER BY    W
        ,   H

出力

W  H  A
-- -- - 
15 15 9
16 15 5
于 2012-05-01T14:45:39.163 に答える