合并行并给我总数

艾里克尔

我想计算一个用户玩过多少个独特的游戏。当前的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 ... 不起作用,因为它仅将1替换为游戏ID。

如何对行进行求和,使其显示数字2而不是2行?

哈桑

您可以按属性删除组,然后计算玩过的不同游戏。它将返回用户1放置的不同gamep的数量

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章