MySQL条件分组依据BigQuery

时间:2018-11-29 16:40:56

标签: google-bigquery

我有下表。我想汇总几列和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;

2 个答案:

答案 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