【问题标题】:Merge the rows and give me the total count合并行并给我总数
【发布时间】:2016-07-30 12:36:06
【问题描述】:

我想计算一个用户玩过多少独特的游戏。以下是当前 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 行?

【问题讨论】:

    标签: mysql sql-server join count group-by


    【解决方案1】:

    您可以按属性删除组并计算所玩的不同游戏。它将返回用户玩的不同游戏的数量 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
    

    【讨论】:

    • 天哪!你是对的!这段代码花费了太多时间:P 非常感谢!我会尽快接受你的回答。
    猜你喜欢
    • 1970-01-01
    • 2021-02-02
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多