【问题标题】:Count rows with DISTINCT(several columns) and MAX(another column)使用 DISTINCT(几列)和 MAX(另一列)计算行数
【发布时间】:2013-01-20 23:11:08
【问题描述】:

我的表格包含用户对不同项目的投票。它有以下列:

id, user_id, item_id, vote, utc_time

只有 id 是唯一字段,user_idutc_time 的组合可能也是唯一的。但用户可以多次为任何项目投票。

投票不是一个数字,而是具有几个可能值之一(例如,“糟糕”、“糟糕”、“好”、“优秀”)。

我需要计算有多少不同的用户对给定 #item# 投了最后一票,如“优秀”、“好”等。所以假设我只有四个不同的可能投票值,我需要得到四条记录,字段如下:

vote, count_of_users

我了解如何计算所有选票,而不仅仅是用户的最后一票:

SELECT vote, COUNT(id) FROM votes WHERE item_id=#item# GROUP BY vote;

但我不知道如何只计算每个用户的 utc_time = MAX(utc_time) 的票数...感谢您的帮助。

这个问题和我上一个问题有关:Select one row with MAX(column) for known other several columns without subquery

【问题讨论】:

    标签: mysql sql select


    【解决方案1】:

    如果它适合您,请尝试此解决方案,

    SELECT  a.item_ID,
            SUM(CASE WHEN a.vote = 'awful' THEN 1 ELSE 0 END) awful,
            SUM(CASE WHEN a.vote = 'bad' THEN 1 ELSE 0 END) bad,
            SUM(CASE WHEN a.vote = 'good' THEN 1 ELSE 0 END) good,
            SUM(CASE WHEN a.vote = 'excellent' THEN 1 ELSE 0 END) excellent
    FROM    tableName a
            INNER JOIN
            (
                SELECT  user_ID, MAX(utc_time) max_time
                FROM    tableName
                GROUP   BY user_ID
            ) b ON a.user_ID = b.user_ID AND
                    a.utc_time = b.max_time
    -- WHERE   a.item_ID = 'valueHere'
    GROUP   BY a.item_ID
    

    更新 1

    SELECT  a.item_ID,
            a.vote,
            COUNT(*) totalCount
    FROM    tableName a
            INNER JOIN
            (
                SELECT  user_ID, MAX(utc_time) max_time
                FROM    tableName
                WHERE   item_id = 'valueHere'
                GROUP   BY user_ID
            ) b ON  a.user_ID = b.user_ID AND
                    a.utc_time = b.max_time
    GROUP   BY a.vote
    

    【讨论】:

    • 据我了解,我可以将 WHERE item_id = #item# 代替 GROUP BY... 我不喜欢的是我必须在查询中列出所有可能的值...跨度>
    • 如果您只需要特定的item_id,也可以这样做。上面的查询将显示所有item_id
    • 它实际上并没有,它只显示一个 item_id,它看起来像被投票给最新的项目(并且在 WHERE 中它什么都不显示,除非它是最后投票的项目的 id )... 好处是它将投票值作为字段名称返回,这是我不希望的......是否有可能 a) 为每个投票值获取不同的记录,b) 不假设存在是具体的投票值吗?
    • 酷,它让我想起了这里的想法:xaprb.com/blog/2006/12/07/…让我看看它是否有效。
    • 它有效,实际上可以稍微简化一下(已编辑 - 是否正确?)...谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2015-03-11
    相关资源
    最近更新 更多