[英]How do I group by on calculated columns?
假设下表有 3 个数字字段:
Images (table)
--------------
Width
Height
Amount
宽度和高度是以毫米为单位的图像大小。 现在我想创建一个关于按厘米尺寸分组的图像数量的报告。 这意味着我必须对 2 个不存在的列进行 GROUP BY。
我可以:
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 数据库,遗憾的是它似乎不支持 GROUP BY 子句中的聚合函数。
简单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
......,对吧?
以下查询使用Common Table Expression (CTE)
将宽度和高度从 mm 转换为 cm 并进行舍入,然后生成派生表输出。 然后使用此 CTE 输出对宽度和高度值进行分组,以计算数量列的总和。
我不确定您是在查找金额列的SUM
还是金额列的COUNT
。 我根据您的查询假设了SUM 。 如果您只想要COUNT ,请将查询中的SUM更改为COUNT 。
脚本:
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
根据官方 FileMaker SQL 参考 ( https://help.claris.com/en/sql-reference.pdf ) 的第 11 页,Group By 子句仅适用于字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.