BigQuery 的 MySQL 条件组
Posted
技术标签:
【中文标题】BigQuery 的 MySQL 条件组【英文标题】:MySQL Conditional Group By BigQuery 【发布时间】:2018-11-29 16:40:56 【问题描述】:我有下表。我想聚合几列和GROUP BY
store
。问题是如果upc
是负数并且有相应的正数upc
我希望它始终选择正数。如果没有对应的正面upc
,那么保持负面就可以了。此外,当我尝试在 Google BigQuery 上运行类似的查询时(据我了解,它使用 mysql)
并从GROUP BY
中省略upc
我收到错误“SELECT list expression references column upc which is not grouped or aggregated”。知道为什么 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;
【问题讨论】:
如果store
有多个正的upc
值;你想选择其中任何一个?
肯定不会超过一个upc
如果有多个负值怎么办?你在乎选哪一个吗?如果不是,Elliott 的解决方案应该足够了,您应该考虑将其标记为已接受的答案。
是的,负值无关紧要。事实上,我确实选择了 Elliot 的解决方案
【参考方案1】:
BigQuery 不使用 MySQL。如果您想要upc
的正值,则计算列的MAX
:
SELECT store, SUM(amount), SUM(total), MAX(upc)
FROM upc
GROUP BY store;
【讨论】:
【参考方案2】:另一个变化是使用 ANY_VALUE() 而不是 MAX() 来消除计算 MAX 函数,这会产生额外的成本 - 这适用于非常大容量的数据。在小数据上,这甚至可能不可见
#standardSQL
SELECT store, SUM(amount), SUM(total), ANY_VALUE(upc)
FROM `project.dataset.upc`
GROUP BY store
【讨论】:
以上是关于BigQuery 的 MySQL 条件组的主要内容,如果未能解决你的问题,请参考以下文章