如何使用ROLLUP为mysql中的一列创建超级聚合?
我有以下表格:如何使用ROLLUP为mysql中的一列创建超级聚合?,mysql,aggregate,rollup,Mysql,Aggregate,Rollup,我有以下表格: CREATE TABLE IF NOT EXISTS Business ( Ticker VARCHAR(255) NOT NULL UNIQUE, Company_Name VARCHAR(255) NOT NULL UNIQUE, Currency CHAR(3) NOT NULL, Portfolio VARCHAR(255) NOT NULL, PRIMARY KEY ( Company_Name
CREATE TABLE IF NOT EXISTS Business (
Ticker VARCHAR(255) NOT NULL UNIQUE,
Company_Name VARCHAR(255) NOT NULL UNIQUE,
Currency CHAR(3) NOT NULL,
Portfolio VARCHAR(255) NOT NULL,
PRIMARY KEY ( Company_Name ),
FOREIGN KEY ( Currency ) REFERENCES Currency ( Currency_Code ) ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY ( Portfolio ) REFERENCES Portfolio ( Portfolio_Name ) ON UPDATE CASCADE ON DELETE RESTRICT,
CONSTRAINT CHK_Ticker CHECK ( Ticker = UPPER( Ticker ) )
);
CREATE TABLE IF NOT EXISTS Dividend (
Dividend_ID INTEGER NOT NULL UNIQUE AUTO_INCREMENT,
Ticker VARCHAR(255) NOT NULL,
Dividend_Date DATE NOT NULL,
Dividend_Amount DOUBLE NOT NULL,
SGD_XR DOUBLE NOT NULL,
PRIMARY KEY ( Dividend_ID ),
FOREIGN KEY ( Ticker ) REFERENCES Business ( Ticker ) ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT CHK_SGD_XR CHECK ( SGD_XR >= 0 )
);
我想将这些表用于以下选择:
SELECT
IFNULL( Business.Company_Name,'Total Year To Date Dividends (SGD)' ) AS Company_Name,
SUM(
CASE WHEN Dividend.Dividend_Date >= STR_TO_DATE( CONCAT( '1 January ', YEAR(CURDATE()) ), '%d %M %Y' ) AND Dividend.Dividend_Date <= CURDATE()
THEN Dividend.Dividend_Amount
END) AS Year_To_Date_Dividends,
SUM(
CASE WHEN Dividend.Dividend_Date >= STR_TO_DATE( CONCAT( '1 January ', YEAR(CURDATE()) ), '%d %M %Y' ) AND Dividend.Dividend_Date <= CURDATE()
THEN Dividend.Dividend_Amount / Dividend.SGD_XR
END) AS SGD_Year_To_Date_Dividends
FROM Business
LEFT JOIN Dividend
ON Business.Ticker = Dividend.Ticker
GROUP BY Business.Company_Name WITH ROLLUP
选择
如果公司名称为空(业务.公司名称,'年初至今股息总额(SGD)',
总数(
当divident.divident\u Date>=STR\u TO\u Date(CONCAT('1',YEAR(CURDATE()),'%d%M%Y')和divident.divident\u Date=STR\u TO\u Date(CONCAT('1',YEAR(CURDATE()),'%d%M%Y')和divident.divident\u Date而不是:
SUM(
CASE WHEN Dividend.Dividend_Date >= STR_TO_DATE( CONCAT( '1 January ', YEAR(CURDATE()) ), '%d %M %Y' ) AND Dividend.Dividend_Date <= CURDATE()
THEN Dividend.Dividend_Amount
END) AS Year_To_Date_Dividends,
代替
Dividend.Dividend_Amount / Dividend.SGD_XR
ROUND(Dividend.Dividend_Amount / Dividend.SGD_XR,2)
Dividend.Dividend_Amount / Dividend.SGD_XR