假设下表包含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
但是这只会在视图级别进行mm到cm的转换,并且会为相同的尺寸生成多行。
e.g。
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数据库,不幸的是,它似乎不支持GROUP BY子句中的聚合函数。
答案 0 :(得分:6)
只需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
行...,对吗?
答案 1 :(得分: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
答案 2 :(得分:0)
按照正式的FileMaker SQL参考(https://help.claris.com/en/sql-reference.pdf)的第11页,Group By子句仅适用于字段。