2013-02-25 72 views
0

我希望使用mySQL來劃分同一列的值。mySQL從同列中劃分兩個值

有沒有更好的方法做到這一點???我真的需要3個選擇語句嗎?

SELECT (SELECT FixAM From Fixes WHERE Id = 1)/(SELECT FixAM From Fixes WHERE Id = 2) 

我的表結構如下:

CREATE TABLE IF NOT EXISTS `Fixes` (
    `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'PK', 
    `CurrencyId` int(11) NOT NULL COMMENT 'FK', 
    `MetalId` int(11) NOT NULL COMMENT 'FK', 
    `FixAM` decimal(10,5) NOT NULL, 
    `FixPM` decimal(10,5) DEFAULT NULL, 
    `TimeStamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`Id`), 
    KEY `CurrencyId` (`CurrencyId`), 
    KEY `MetalId` (`MetalId`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=13 ; 

-- 
-- Dumping data for table `Fixes` 
-- 

INSERT INTO `Fixes` (`Id`, `CurrencyId`, `MetalId`, `FixAM`, `FixPM`, `TimeStamp`) VALUES 
(1, 1, 1, '1592.50000', '1586.25000', '2013-02-25 15:10:21'), 
(2, 2, 1, '1051.84900', '1049.59300', '2013-02-25 15:10:21'), 
(3, 3, 1, '1201.88700', '1194.10600', '2013-02-25 15:10:21'), 
(4, 1, 2, '29.17000', NULL, '2013-02-25 13:54:02'), 
(5, 2, 2, '19.27580', NULL, '2013-02-25 13:54:02'), 
(6, 3, 2, '21.98190', NULL, '2013-02-25 13:54:02'), 
(7, 1, 3, '1627.00000', '1620.00000', '2013-02-25 14:28:59'), 
(8, 2, 3, '1074.65000', '1072.50000', '2013-02-25 14:28:59'), 
(9, 3, 3, '1229.30000', '1218.95000', '2013-02-25 14:28:59'), 
(10, 1, 4, '747.00000', '748.00000', '2013-02-25 14:28:59'), 
(11, 2, 4, '493.40000', '495.20000', '2013-02-25 14:28:59'), 
(12, 3, 4, '564.40000', '562.85000', '2013-02-25 14:28:59'); 

回答

2

我認爲這是你在找什麼:

SELECT MetalId, 
    MAX(CASE WHEN CurrencyId = 1 THEN FixAM END)/
    MAX(CASE WHEN CurrencyId = 2 THEN FixAM ELSE 1 END) Output 
FROM Fixes 
GROUP BY MetalId 

這將產生1592.50000/1051.849000。如果你想要相反的話,交換貨幣ids。

SQL Fiddle Demo

如果你沒有CurrencyId = 2,I分割值默認爲1這樣你就不會收到錯誤。

+0

您好,爲清晰起見更新的問題... – Gravy 2013-02-25 16:08:14

+0

@Gravy - 我編輯了我的答案。不需要子查詢 - 這適用於MAX和CASE。不過,如果你想要1051/1592,只需交換上面的CurrencyIds。祝你好運! – sgeddes 2013-02-25 16:10:39

+0

完美,謝謝... – Gravy 2013-02-25 17:38:53