我有一個包含以下列的表格:1) 小時 [0-47 之間的值] 2) 類別(農產品、肉類、乳制品)3)平均(數量)。此表遵循已選擇 4 周時間的查詢。
如何選擇每小時的最高平均數量類別?對于每個小時,我都想要表現最好的類別。不是每個類別在一個小時內的最佳表現。
問題是每次嘗試要么洗掉類別,小時,回傳每個小時部分的所有類別,要么根本不選擇每個類別的最大值。
我試過的:
Select hour_key, category, Avg(Quantity)
From Step2Time
Group by hour_key, category
原表:
| 小時 | 類別 | 平均數量 |
|---|---|---|
| 0 | 乳制品 | 123 |
| 23 | 肉 | 16 |
| 45 | 乳制品 | 11 |
回傳結果:
| 小時 | 類別 | 數量 |
|---|---|---|
| 0 | 乳制品 | 15 |
| 0 | 肉 | 16 |
| 0 | 乳制品 | 13 |
預期成績:
| 小時 | 類別 | 數量 |
|---|---|---|
| 0 | 乳制品 | 15 |
| 1 | 肉 | 8 |
| 2 | 乳制品 | 16 |
uj5u.com熱心網友回復:
您可以使用子查詢來識別“按小時計算的最高類別”。然后,使用其結果與原始表連接并在最終查詢中獲取更多資訊(列),如下所示:
SELECT Cat.Hour, Cat.Category, Cat.Quantity
FROM (SELECT orig.Hour, MAX(orig.Quantity) AS MaxQuantity
FROM Cat orig
INNER JOIN (SELECT Hour, Category, AVG(Quantity) AS MaxQuantity
FROM Cat
GROUP BY Hour, Category
) aggr ON orig.Hour = aggr.Hour AND orig.Category = aggr.Category
GROUP BY orig.Hour
)
aggr
INNER JOIN Cat ON (Cat.Hour = aggr.Hour AND Cat.Quantity = aggr.MaxQuantity)
ORDER BY aggr.Hour
你可以在這里看到這個 -> http://sqlfiddle.com/#!18/6e7bf9/3
uj5u.com熱心網友回復:
我自己仍在學習 SQL,所以請原諒我,但我認為您需要對 COUNT 函式做一些棘手的事情。
也許嘗試以下操作:
SELECT hour_key
,(SELECT TOP 1 category FROM Step2Time ORDER BY COUNT(Category) DESC)
, Avg(Quantity)
FROM Step2Time
如果我是對的(并且我很高興是錯的),這至少會按最常見的類別計數對結果進行排序,并選擇前 1 名,即最頻繁的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/355176.html
標籤:sql 阿帕奇火花 apache-spark-sql 最大限度 类别
上一篇:如何在PostgreSQL中洗掉具有特定值的所有JSON屬性
下一篇:SQL層次ID型別問題
