我有下表。我想汇总几列和GROUP BY
store
。问题是如果upc
是负数,并且有一个对应的正数upc
,我希望它始终选择正数。如果没有相应的正数upc
,则保留负数就可以了。另外,当我尝试在Google BigQuery上运行类似的查询时(据我了解,使用MySQL)
并从upc
中忽略了GROUP BY
,我得到一个错误“选择列表表达式引用的列upc既未分组也未聚集”。知道BigQuery为什么表现与MySQL工作台不同,以及如何强制查询始终采用正数upc
?
谢谢
CREATE TABLE upc (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
store VARCHAR(30) NOT NULL,
amount DOUBLE,
total INT,
upc INT
);
INSERT INTO upc (store, amount, total, upc) VALUES
('123', 12.3, 1, 123),
('123', 45.6, 2, -666),
('789', 78.9, 3, 789),
('789', 78.9, 3, 789),
('456', 78.9, 3, -456),
('456', 78.9, 3, -456),
('123', 78.9, 3, 123);
SELECT store, SUM(amount), SUM(total), upc FROM upc
GROUP BY store;
答案 0 :(得分:1)
BigQuery不使用MySQL。如果想要正值upc
,请计算列的MAX
:
SELECT store, SUM(amount), SUM(total), MAX(upc)
FROM upc
GROUP BY store;
答案 1 :(得分:1)
另一种变化是使用ANY_VALUE()而不是MAX()来消除计算MAX函数的过程,这会产生额外的费用-这可能适用于真正大量的数据。在小数据上,这甚至不可见
#standardSQL
SELECT store, SUM(amount), SUM(total), ANY_VALUE(upc)
FROM `project.dataset.upc`
GROUP BY store