2012-11-09 97 views
0
CREATE TABLE newsarticles 
    (katernenID int, Buitenland int, Economie int, Sport int, Cultuur int, Wetenschap int, Media int, userID int); 

INSERT INTO newsarticles 
    (katernenID, Buitenland, Economie, Sport, Cultuur, Wetenschap, Media, userID) 
VALUES 
    (1, 24, 5, 52, 3, 2, 3, 1), 
    (3, 2, 0, 0, 1, 51, 66, 5), 
    (4, 50, 2, 67, 41, 1, 54, 6), 
    (5, 30, 1, 79, 0, 0, 12, 7), 
    (6, 9, 26, 0, 100, 11, 0, 8), 
    (7, 2, 14, 8, 1, 33, 98, 9), 
    (8, 0, 1, 0, 1, 0, 0, 10); 



SELECT 
    userID,GROUP_CONCAT(amt ORDER BY amt DESC) AS four_highest 
FROM 
(
    SELECT userID, @rownum := @rownum + 1 AS rank, NAME, amt FROM (
    SELECT userID, Buitenland AS amt, 'Buitenland' AS NAME UNION 
    SELECT userID, Economie, 'Economie' UNION 
    SELECT userID, Sport, 'Sport' UNION 
    SELECT userID, Cultuur, 'Cultuur' UNION 
    SELECT userID, Wetenschap, 'Wetenschap' UNION 
    SELECT userID, Media, 'Media' 
     FROM(SELECT katernenID, Buitenland, Economie, Sport, Cultuur, Wetenschap, Media, userID FROM newsarticles ) temp 

) amounts, (SELECT @rownum := 0) r 
) top4 
GROUP BY userid 

我想在上面的查詢中創建UNION,但Union不工作。 UNION立即需要FROM語句。 像:使用UNION的子查詢選擇

SELECT userID, Wetenschap, 'Wetenschap' 
       FROM(SELECT katernenID, Buitenland, Economie, Sport, Cultuur, Wetenschap, Media, userID FROM newsarticles ) temp 
       UNION 
    SELECT userID, Media, 'Media' 
     FROM(SELECT katernenID, Buitenland, Economie, Sport, Cultuur, Wetenschap, Media, userID FROM newsarticles ) temp 

但我不能重複FROM語句,也有子查詢太多計算。有沒有辦法做到這一點,或者我錯過了什麼?

OR

我想最大(a_percentage,b_percentage,c_percentage),SecondMAX(a_percentage,b_percentage,c_percentage),ThirdMAX(a_percentage,b_percentage,c_percentage)

SELECT id,a,b,c,a_percentage,b_percentage,c_percentage 
    -- -------------------------max percentage 
    GREATEST(axis_per, hdfc_per,icici_per,citi_per) AS max_per, 
    FROM (
     SELECT id,a,b,c, 
     IFNULL(a*100/a+b+c+d,0) AS a_percentage, 
     IFNULL(b*100/a+b+c+d,0) AS b_percentage, 
     IFNULL(c*100/a+b+c+d,0) AS c_percentage 
     FROM test 
     WHERE TIME > '2012-01-01' 
     GROUP BY id 
    ) A 
+0

出你的結構的nd樣本記錄,你期望的結果是什麼? –

回答

0

如果我的新列理解正確的話,你應該能夠在FROM只使用表名和別名每一行的列,是這樣的:

SELECT 
    userID,GROUP_CONCAT(amt ORDER BY amt DESC) AS four_highest 
FROM 
(
    SELECT userID, @rownum := @rownum + 1 AS rank, NAME, amt FROM (
    SELECT userID, Buitenland AS amt, 'Buitenland' AS NAME FROM newsarticles NAME UNION 
    SELECT userID, Economie, 'Economie' FROM newsarticles UNION 
    SELECT userID, Sport, 'Sport' FROM newsarticles UNION 
    SELECT userID, Cultuur, 'Cultuur' FROM newsarticles UNION 
    SELECT userID, Wetenschap, 'Wetenschap' FROM newsarticles UNION 
    SELECT userID, Media, 'Media' FROM newsarticles 
) amounts, (SELECT @rownum := 0) r 
) top4 
GROUP BY userid 
+0

你是完全正確的,但我不能從這樣的表中獲取數據。這個陳述是虛假的「SELECT katernenID,Buitenland,Economie,Sport,Cultuur,Wetenschap,Media,userID FROM newsarticles」。取而代之的是,內部查詢中有太多的計算,並且有一些來自計算的新列。 – Garry

+0

您可以在問題中發佈示例嗎? – harriyott