![](/img/trans.png)
[英]How do I incorporate FLOAT in my query when calculating the average of a set of values when my result could be a FLOAT and not INTEGER to avoid error
[英](SQL) How do you select a max float value along with other datatypes values within a query?
我正在使用 Iowa Liquor Sales 数据集,在本例中称为“bigquery-public-data.iowa_liquor_sales.sales”。 相关列及其数据类型为 date(DATE)、sale_dollars(FLOAT)、item_description(STRING)、store_name(STRING)。
我正在尝试编写一个查询,该查询将返回过去三年(2021、2020、2019)中每年的最高销售额以及日期、item_description 和 store_name。
以下代码有效,但仅涵盖一年。 我知道我每次都可以复制+粘贴并更改日期,但这似乎很乏味。 有没有更好的办法?
SELECT date, sale_dollars, item_description, store_name
FROM `bigquery-public-data.iowa_liquor_sales.sales`
WHERE date between '2021-01-01' and '2021-12-31'
ORDER BY sale_dollars DESC
LIMIT 1
日期 | sale_dollars | 商品描述 | 商店名称 |
---|---|---|---|
2021-04-19 | 250932.0 | 铁托斯手工伏特加 | 海维 #3 |
在尝试不同的方式来编写它以使 2019、2020 和 2021 年的最大销售额连同它们的日期、item_description 和 store_name 一起返回时,我遇到了错误。 下面是我得到的最接近的(缺少日期、item_description 和 store_name)。
SELECT
(SELECT MAX(sale_dollars)
FROM `bigquery-public-data.iowa_liquor_sales.sales`
WHERE date between '2021-01-01' and '2021-12-31') as sale_2021,
(SELECT MAX(sale_dollars)
FROM `bigquery-public-data.iowa_liquor_sales.sales`
WHERE date between '2020-01-01' and '2020-12-31') as sale_2020,
(SELECT MAX(sale_dollars)
FROM `bigquery-public-data.iowa_liquor_sales.sales`
WHERE date between '2019-01-01' and '2019-12-31') as sale_2019
如何编写一个查询来返回过去三年的最大销售额以及日期、商品和商店名称?
由于三个值只传递一个值,您可以将它们添加到第一个查询中,仅适用于三年
SELECT
date, sale_dollars, item_description, store_name,
(SELECT MAX(sale_dollars)
FROM `bigquery-public-data.iowa_liquor_sales.sales`
WHERE date between '2021-01-01' and '2021-12-31') as sale_2021,
(SELECT MAX(sale_dollars)
FROM `bigquery-public-data.iowa_liquor_sales.sales`
WHERE date between '2020-01-01' and '2020-12-31') as sale_2020,
(SELECT MAX(sale_dollars)
FROM `bigquery-public-data.iowa_liquor_sales.sales`
WHERE date between '2019-01-01' and '2019-12-31') as sale_2019
FROM `bigquery-public-data.iowa_liquor_sales.sales`
WHERE date between '2019-01-01' and '2021-12-31'
ORDER BY sale_dollars DESC
LIMIT 1
考虑以下查询
SELECT EXTRACT(YEAR FROM date) year,
ARRAY_AGG(
STRUCT(date, sale_dollars, item_description, store_name)
ORDER BY sale_dollars DESC LIMIT 1
)[OFFSET(0)].*
FROM `bigquery-public-data.iowa_liquor_sales.sales`
WHERE date BETWEEN '2019-01-01' AND '2021-12-31'
GROUP BY 1;
+------+------------+--------------+----------------------+-------------------------------+
| year | date | sale_dollars | item_description | store_name |
+------+------------+--------------+----------------------+-------------------------------+
| 2020 | 2020-10-08 | 250932.0 | Titos Handmade Vodka | Hy-Vee #3 / BDI / Des Moines |
| 2019 | 2019-10-08 | 78435.0 | Makers Mark | Hy-Vee Food Store / Urbandale |
| 2021 | 2021-07-05 | 250932.0 | Titos Handmade Vodka | Hy-Vee #3 / BDI / Des Moines |
+------+------------+--------------+----------------------+-------------------------------+
或者,您可以使用 window function 获得相同的结果
SELECT date, sale_dollars, item_description, store_name
FROM `bigquery-public-data.iowa_liquor_sales.sales`
WHERE date BETWEEN '2019-01-01' AND '2021-12-31'
QUALIFY ROW_NUMBER() OVER (
PARTITION BY EXTRACT(YEAR FROM date) ORDER BY sale_dollars DESC
) = 1;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.