2014-12-04 51 views
0

如果我有一個表像這樣:如何等欄目MySQL的總結與其他列

Name Type Val 
Mike A  1 
John A  4 
Jerry   6 

(請注意,傑裏對Type空字符串)

我真的很喜歡

查詢
Select sum(Val), Type from table 

MySQL如何選擇將哪一個Type放入一行結果?如果我想返回「非空白」

要給出一些上下文,此表中每行的類型實際上應該是相同的,但過去有一個錯誤,現在有一些空白值。 (請注意,總和仍然應該包含空白)

我知道我可以在兩個查詢中完成這項工作,只是select Type from table where Type!="",但是我很好奇在單個查詢中是否有這樣的技巧。

+0

不知道你的平臺是什麼,但我不認爲你設置的SQL是有效的。你需要一個'按類型'來編譯它。在這種情況下,您可以添加一個'where type!='''來進行單個查詢。 – paqogomez 2014-12-04 15:46:11

+0

除(AFAIK)MySQL外,你得到的是一個錯誤。 – 2014-12-04 15:46:14

+0

我正在使用MySQL和SQLLite - 我編輯後澄清 – K2xL 2014-12-04 15:46:59

回答

0

這是MySQL中的有效SQL。您正在將所有行聚合到一行(通過使用聚合函數SUM並且沒有GROUP BY子句)。

任何既不在GROUP BY子句中也不被聚合的值是隨機的。你得到的類型只是表中的那些類型之一;當你再次執行相同的查詢時,它甚至可能是另一個。

例如,您可以使用max(type)min(type)來獲取您之後的值。

+0

有趣 - 它是真正的隨機隨機? – K2xL 2014-12-05 16:28:17

+0

好吧,它應該是組內的一個隨機匹配。 (因爲你的例子中沒有group by和where子句,它是所有記錄的隨機值。)我想MySQL只是舔掉它看到的第一個或最後一個值,所以當你看到的時候,你不太可能得到不同的結果發射相同的查詢兩次,但你不能依賴它。 – 2014-12-07 12:01:05

+0

下面是一個安全使用它的例子:'select o.id,o.order_date,sum(od.amount)from order o join order_details od on od.order_id = o.id group by o.id'。您可以在這裏加入訂單和訂單細節,從而獲得多重訂單。然後你按順序分組。您只需按order.id進行分組,然後選擇「隨機」訂單日期。因爲這是組中所有記錄的同一日期(它是訂單的一個日期),所以您不需要將它放在GROUP BY子句中,或者可笑地選擇max(o.order_date)或min(o.order_date ) - 就像你在其他大多數dbms中一樣 - 你只需訪問o.order_date。 – 2014-12-07 12:09:17