【问题标题】:SQL count each distinct value in column and add name from another table where the ID matchesSQL 对列中的每个不同值进行计数,并从 ID 匹配的另一个表中添加名称
【发布时间】:2012-07-13 03:11:20
【问题描述】:

我的 SQL 技能几乎没有。在环顾过去 2 小时试图弄清楚这一点后,我需要一些帮助。

我有 2 个如下表

Table1                    Table2 

ID  | Name                Status_id
-----------               ----------
1   |   Open                  1
2   |   Closed                2
3   |   On-Hold               1

我想做的是计算表2中的status_id并按status_id分组。然后在第一列中添加与 ID 匹配的名称。

我现在拥有的是

SELECT status_id, COUNT(*) AS 'num' FROM table2 GROUP BY status_id

到目前为止,这很棒并返回

1   |   2
2   |   1

我需要返回的是

Open   |   2
Closed |   1

我希望这很清楚。有人可以帮忙吗?

非常感谢!

【问题讨论】:

    标签: mysql sql join count group-by


    【解决方案1】:
    SELECT a.name, COUNT(*) AS num FROM table2 b 
    INNER JOIN table1 a 
    ON b.status_id=a.id 
    GROUP BY status_id
    

    【讨论】:

    • 太棒了,当您知道如何操作时很容易!非常感谢您的快速回复!
    • table2 中还有一列叫做“日期”。您知道我如何指定此数据以仅显示该日期是否等于今天?日期当前存储为“1341241153”。感谢您的帮助!
    【解决方案2】:

    如果您还想为 On-Hold 设置零,则需要进行 LEFT 联接并计算 table2 中的 a 列而不是 *

    SELECT t1.name,
           Count(t2.Status_id) AS num 
    FROM   table1 t1 
           LEFT JOIN table2 t2 
                   ON t1.id = t2.Status_id
    GROUP  BY t1.name;
    

    DEMO

    【讨论】:

    • 感谢您的回答。我想我更喜欢它不显示任何没有价值的东西。它使我正在做的图表不那么混乱。 table2 中还有一列称为“日期”。您知道我如何指定此数据仅显示该日期是否等于今天吗?日期当前存储为“1341241153”。感谢您的帮助!
    • 你真的应该把它放在另一个问题中,因为a)几乎只有我会阅读你的问题,b)人们很难找到隐藏在评论中的答案。另外,我不确定您所说的“显示”是什么意思。这可能意味着仅在今天显示列中的值,或者仅在今天显示行。
    • 当然没问题。我会把它添加到另一个问题中,让自己更清楚。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 2020-06-23
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多