[英]MySQL violating SQL standard
我最初誤解了這個問題。
MySQL 不再支持:
select b
from a
group by c;
(至少使用默認設置)。 耶。 這會像它應該的那樣返回一個錯誤,就像它在幾乎所有其他數據庫中所做的那樣(我認為 SQLite 可能是現在最后的保留)。
這違反了標准——通常(見下文)。 問題是每個c
值返回一行。 GROUP BY 中除c
以外的任何內容都應作為GROUP BY
GROUP BY
的參數。
有一種情況允許這樣做。 即c
是 a 中a
主鍵或唯一鍵(技術上稱為“功能相關”)。 在這種情況下,您可以 select 表中的其他列而不使用聚合函數。 Postgres 是支持此功能的數據庫之一。
如果你想要b
每個c
的一個值,那么規范的解決方案是這樣的:
select max(b)
from a
group by c;
Postgres 還提供了distinct on
which 允許更大的靈活性:
select distinct on (c) b
from a
order by c, random();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.