2016-07-30 67 views
1

我想统计用户已玩过多少个独特游戏。下面是当前的SQL查询的样子:合并行并给我总计数

SELECT COUNT(DISTINCT d.id_game) AS c 
FROM discord AS d 
JOIN discord_games AS dg 
ON d.id_game = dg.id 
WHERE d.id_user = '1' 
AND d.id_game != '0' 
GROUP BY d.id_game 
ORDER BY dg.data_name ASC 

,这里是现在数据库的样子:

CREATE TABLE IF NOT EXISTS `discord` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `id_user` int(11) NOT NULL, 
    `id_channel` varchar(50) NOT NULL, 
    `id_game` int(11) NOT NULL, 
    `data_muted_server` tinyint(4) NOT NULL, 
    `data_muted_self` tinyint(4) NOT NULL, 
    `data_deafen_server` tinyint(4) NOT NULL, 
    `data_deafen_self` tinyint(4) NOT NULL, 
    `data_suppressed` tinyint(4) NOT NULL, 
    `data_status` varchar(10) NOT NULL, 
    `datetime_logged` datetime NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`) 
) 


CREATE TABLE IF NOT EXISTS `discord_games` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `data_name` varchar(50) NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`) 
) 


CREATE TABLE IF NOT EXISTS `discord_users` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `data_id` text NOT NULL, 
    `data_name` varchar(50) NOT NULL, 
    `data_avatar` text, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`) 
) 

SQL查询正确计算,但它只能算作1每行。

我在想什么的例子。如果ID为1的用户玩过24次相同的游戏(例如“战地3”),它将返回1次玩过的游戏。如果同一用户再玩37次游戏,则会返回2次玩过的游戏等等。

SUM(DISTINCT ...不起作用,因为它只用游戏ID替换1。

我怎样才能总结行,所以它显示数字2而不是2行?

回答

0

您可以根据属性去除群组并统计不同的游戏。它会返回用户铺设的不同游戏数量1

SELECT COUNT(DISTINCT d.id_game) AS c 
FROM discord AS d 
JOIN discord_games AS dg 
ON d.id_game = dg.id 
WHERE d.id_user = '1' 
AND d.id_game != '0' 
ORDER BY dg.data_name ASC 
+0

哦,我的!你是对的!这段代码太多时间了:P非常感谢!我会尽快接受你的回答。 – Erik

+0

很高兴帮助:) – Massanu