答案 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