【问题标题】:How to count and group query to get proper results?如何对查询进行计数和分组以获得正确的结果?
【发布时间】:2012-06-02 08:10:55
【问题描述】:

我有问题,请查看我的数据库:

-------------------
| id | article_id |
-------------------
| 1  |      1     |
| 2  |      1     |
| 3  |      1     |
| 4  |      2     |
| 5  |      2     |
| 6  |      3     |
| 7  |      3     |
| 8  |      3     |
| 9  |      3     |
| 10 |      3     |

我想收到这样的东西(按票数排序,从最大到最小):

---------------------------
| id | article_id | votes |
---------------------------
| 1  |      3     |    5  |
| 2  |      1     |    3  |
| 3  |      2     |    2  |

你能帮我写一个正确的sql查询吗?

【问题讨论】:

  • 我想通过查询创建“投票”列
  • 您能否更清楚地说明这个问题?您是说这里的 ID(在第一个区块上)作为对文章的投票吗?

标签: mysql sql count group-by


【解决方案1】:
SET @currentRow = 0;
SELECT @currentRow := @currentRow + 1 AS id, t.article_id, t.c AS `votes`
FROM (
    SELECT article_id, count(*) as `c`
    FROM table_votes
    GROUP BY article_id
    ) t
ORDER BY t.c DESC

请注意,您不能在这种情况下选择这样的 id 列,并且您的“预期结果”不正确。我尽量适应它。

干杯

【讨论】:

  • 你可以有一个计数列,使用一个变量。但大多数时候人们认为他们需要它的原因是错误的。它应该在表中,或者在应用程序级别生成。
  • 我在您评论时添加了它 :-) 尽管您对分析的看法是完全正确的,但从给出答案的角度来看,我将其包括在内。
【解决方案2】:
SELECT article_id, COUNT(article_id) AS votes
FROM votes_table
GROUP BY article_id
ORDER BY votes DESC;

【讨论】:

    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2019-04-14
    • 1970-01-01
    相关资源
    最近更新 更多