簡體   English   中英

從表中按字段分組選擇(sum(field)-max(field))

[英]select (sum(field) - max(field)) from table group by field

我有2張桌子:

CREATE TABLE IF NOT EXISTS `prodotti` (
  `ID` smallint(3) NOT NULL,
  `Denominazione` varchar(15) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `prodotti` (`ID`, `Denominazione`) VALUES
(111, 'latte'),
(222, 'uova');


CREATE TABLE IF NOT EXISTS `fornitori` (
  `ID` int(3) NOT NULL,
  `CF` varchar(5) NOT NULL,
  `date` varchar(8) NOT NULL,
  `Prezzo` int(3) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `fornitori` (`ID`, `CF`, `date`, `Prezzo`) VALUES
(111, 'AAAAA', '22/11/09', 100),
(222, 'AAAAA', '22/11/09', 200),
(222, 'BBBBB', '28/10/09', 400),
(111, 'CCCCC', '30/12/07', 100),
(222, 'CCCCC', '30/12/07', 200);

現在這是一些SQL查詢:

SELECT P.ID, COUNT(*) 
  FROM prodotti P, 
       (SELECT (SUM(Prezzo) - MAX(Prezzo)) AS T
          FROM Fornitori
        GROUP BY 
               prezzo
        )F
 WHERE F.T <200
GROUP BY 
       P.ID

但是我有一個問題

SELECT (
SUM( Prezzo ) - MAX( Prezzo )
) AS T
FROM Fornitori

這返回600 ,但是為什么加上GROUP BY prezzo ,結果返回100 200 0 WHERE FT <200表示什么意思。

當您按Prezzo分組時,對於每個不同的價格,您都會有一行,從Fornitori的行匯總而來。 然后,對於每一行,計算Prezzo的總和(最大值,因為您是按Prezzo分組的,所以它只是單個項目的總和),最大值也是如此,然后將這兩個彼此相減。 如果沒有GROUP BY ,則所有行以及所有價格都將被匯總,您將得到ALL價格的總和減去ALL價格的最大值。

您遇到的問題是:為什么Prezzo分組然后在其上使用聚合? 通常,您將一個或多個列分組,然后在其他列上使用聚合(即,不是您分組的列)。 在我看來,您可能希望按Prezzo以外的其他類別進行分組,或者,如果您確實希望按Prezzo進行分組(例如,獲取有關每個不同價格產品的信息),那么您希望進行匯總其他一些專欄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM