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 ステートメントがすぐに必要です。お気に入り:
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 ステートメントを繰り返すことはできません。サブクエリの計算が多すぎます。これを行う方法はありますか、それとも何か不足していますか?
また
max(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