2012-05-01 65 views
7

下表假設用3個數字字段:如何根據計算列進行分組?

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

寬度和高度以毫米爲單位的圖像大小。現在我想創建一個關於以釐米爲單位的按尺寸分組的圖像數量的報告。這意味着我需要GROUP BY 2不存在的列。

我可以這樣做:

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 

但這會做毫米到釐米的轉換隻在視圖級別,並會導致一個以上的行爲相同的尺寸。

例如

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數據庫,這不幸的是似乎並沒有在集團內部支持聚合函數BY子句。

回答

5

只需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 ......吧?

+4

+1:或者...更換'FROM IMAGES'用'FROM(SELECT ROUND(寬/ 10,0)AS W,ROUND(高度/ 10,0)AS H,來自圖像的數量)AS數據。然後你可以'選擇W,H'和'GROUP BY W,H'和'ORDER BY W,H'並且知道對'W,H'的所有引用總是指向派生列,而不必重複你的計算。 – MatBailie

+0

適用於mysql,但不適用於FileMaker。似乎FileMaker既不允許GROUP BY中的函數也不允許子查詢中的表格:( – mselbach

+0

@mselbach)您可以在FileMaker中創建表變量嗎?臨時表怎麼辦?在這種情況下,這可能是兩步操作,您可以創建除法 - 值先,然後聚合他們 – Matthew

2

以下查詢使用Common Table Expression (CTE)將寬度和高度從mm轉換爲cm以及舍入,然後生成派生表輸出。然後使用此CTE輸出對寬度和高度值進行分組以計算金額列的總和。

我不知道,如果你正在尋找的金額列的SUM或量列COUNT。根據您的查詢,我假設爲SUM。如果您只想要COUNT,請將SUM更改爲COUNT

Click here to view the demo in 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 
+0

謝謝你這個解決方案。我看到這將是真正的SQL數據庫的方法,但在FileMaker它只是無法正常工作。 – mselbach