从多个列和行中查找最常用的值

时间:2016-02-29 19:26:14

标签: mysql

如何从同一个表的多个列和行中找到最常用的值(在本例中为整数)?

我正在构建一个梦幻足球游戏,我希望每周从用户阵容中获得最常用的玩家(下图中的player1到player11列):

enter image description here

2 个答案:

答案 0 :(得分:0)

-- create a temporary table
CREATE TEMPORARY TABLE game_player (
    player_id INT NOT NULL,
    game_date DATE NOT NULL,
    PRIMARY KEY (player_id, game_date)
);

-- populate the table for player1-11
INSERT INTO game_player
SELECT player1, STR_TO_DATE(`day`, '%Y%m%d') FROM YOURTABLE;
INSERT INTO game_player
SELECT player2, STR_TO_DATE(`day`, '%Y%m%d') FROM YOURTABLE;
...
INSERT INTO game_player
SELECT player11, STR_TO_DATE(`day`, '%Y%m%d') FROM YOURTABLE;

-- view player_id and the date he played - the data you populated
SELECT * FROM game_player;

-- GROUP_CONCAT(game_date) to see what days they played (NOT REQUIRED)
-- most-used player with #games
SELECT player_id, COUNT(*) games, GROUP_CONCAT(game_date) game_dates
FROM test.game_player
GROUP BY player_id
ORDER BY games DESC
LIMIT 1;

答案 1 :(得分:-1)

这是我迄今为止所拥有的,虽然速度超慢(约为1M记录的200s):

SELECT player, COUNT(*) AS `count` FROM (
SELECT player1 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player2 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player3 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player4 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player5 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player6 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player7 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player8 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player9 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player10 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player11 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player12 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player13 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player14 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
UNION ALL
SELECT player15 AS `player` FROM `lineup` WHERE `lineup`.`day` = 2015026
) AS matchDayPlayers GROUP BY player ORDER BY COUNT(*) DESC