2016-07-30 69 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