【问题标题】:SQL - count rows where one column matches another (pairs)SQL - 计算一列与另一列匹配的行数(对)
【发布时间】:2015-06-27 05:22:13
【问题描述】:

我在一个网站上有一个投票系统,每个用户都可以投票给一对用户(女性和男性)获胜。

投票存储在如下表中。

voter_id |  voted_for | cell
90       |  30        | f
90       |  68        | m
42       |  30        | f
42       |  68        | m
111      |  74        | f
111      |  20        | m
45       |  120       | f
16       |  90        | f
16       |  135       | m
122      |  30        | f
122      |  68        | m
45       |  116       | m
46       |  30        | m
46       |  121       | f

现在,我想计算每对有多少用户投票。 例如。 '对 30&68 投 3 票'、'对 74&20 投 1 票'、'对 120&116 投 1 票'等等......

我有一个 SQL 查询,它计算 voted_for 中提到的每个用户,但这不包括 pair-thing。它会给我 4 票给用户 30,但用户 30 虽然在 30 和 121 对中。

SELECT voted_for, count(*) AS count
FROM votes
GROUP BY voted_for
ORDER BY count desc

【问题讨论】:

    标签: sql sqlite join count


    【解决方案1】:

    首先像这样转换你的表格:

    | voter_id | voted_for_f | voted_for_m |
    |----------|-------------|-------------|
    |       16 |          90 |         135 |
    |       42 |          30 |          68 |
    |       45 |         120 |         116 |
    |       46 |          30 |         121 |
    |       90 |          30 |          68 |
    |      111 |          74 |          20 |
    |      122 |          30 |          68 |
    

    您可以使用此查询来执行此操作,它将表与自身连接起来:

    SELECT f.voter_id,
           f.voted_for AS voted_for_f,
           m.voted_for AS voted_for_m
    FROM votes AS f
    JOIN votes AS m ON f.voter_id = m.voter_id
                   AND f.cell = 'f'
                   AND m.cell = 'm'
    

    那你就可以用这个查询来算了:

    SELECT f.voted_for AS voted_for_f,
           m.voted_for AS voted_for_m,
           COUNT(*) AS number_of_votes
    FROM votes AS f
    JOIN votes AS m ON f.voter_id = m.voter_id
                   AND f.cell = 'f'
                   AND m.cell = 'm'
    GROUP BY voted_for_f,
             voted_for_m
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      相关资源
      最近更新 更多