【问题标题】:Count repeated group values in sql计算sql中重复的组值
【发布时间】:2014-08-20 14:50:41
【问题描述】:

我有一个表,其中包含具有唯一 p_id 的个人的重复记录,这些个人是具有 s_id 的不同站点的成员。如何获得具有 X 个唯一 p_id 的网站数量?

所以我现在有

p_id  name   s_id
----  ----   ----
1     John   01
2     Alex   01
3     Ben    02
4     Mark   02
5     Colin  02
etc

我想使用 SQL 来生成这个表:

Site with 1 people: 0
Sites with 2 people: 1
Sites with 3 people: 3

我想过这样做:

select p_id, s_id, s_count from 
  (select p_id, s_id, count(*) as s_count from mytable group by s_id)

但我不认为这是正确的,可能有更好的方法 - 有什么想法吗?

如果有人感到困惑 - 我正在寻找 sql 语句来获取计数,而不是其他任何东西。

【问题讨论】:

  • 你永远不会从这张桌子上得到site with 1 people: 0。数据库不能像那样凭空产生结果行。
  • @MarcB - 我知道,很明显。但我想数一数。
  • 实际上,SQLite 可以通过递归 CTE 生成数字。但目前尚不清楚实际需要哪个数据库……
  • @CL - 实际上是 sqlite。

标签: sql sqlite count


【解决方案1】:

首先,统计每个站点的人数:

SELECT s_id,
       COUNT(*) AS NumberOfPeople
FROM ATable
GROUP BY s_id

每个站点输出一行。

然后,再次分组,但按先前计算的计数列:

SELECT NumberOfPeople,
       COUNT(*) AS NumberOfSites
FROM (SELECT s_id,
             COUNT(*) AS NumberOfPeople
      FROM ATable
      GROUP BY s_id)
GROUP BY NumberOfPeople

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    相关资源
    最近更新 更多