Mysql SQL:统计表中的不同行值

Mysql SQL:统计表中的不同行值,mysql,sql,count,group-by,Mysql,Sql,Count,Group By,我在SQL中有一个类似的表: id |tag | entryID ---+----+-------- 1 |foo | 0 2 |foo | 0 3 |bar | 3 5 |bar | 3 6 |foo | 3 7 |foo | 3 我想运行一个查询来计算表中不同的行(去掉id列)。结果应如下所示(或此表的转置): 这个查询应该是什么样子的 注意:每个列中的值事先不知道。您可以使用条件聚合来实现这一点: select sum(tag = 'foo' and entryId = 0)

我在SQL中有一个类似的表:

id |tag | entryID
---+----+--------
1  |foo | 0
2  |foo | 0
3  |bar | 3
5  |bar | 3
6  |foo | 3
7  |foo | 3
我想运行一个查询来计算表中不同的行(去掉
id
列)。结果应如下所示(或此表的转置):

这个查询应该是什么样子的


注意:每个列中的值事先不知道。

您可以使用条件聚合来实现这一点:

select sum(tag = 'foo' and entryId = 0) as "tag=foo, entryID=0",
       sum(tag = 'foo' and entryId = 3) as "tag=foo, entryID=3",
       sum(tag = 'bar' and entryId = 3) as "tag=bar, entryID=0"
from t;
但是,通常的方法是将计数放在行中,而不是列中:

select tag, entryId, count(*)
from t
group by tag, entryId;

行的用途更广泛,因为您不必列出可能要匹配的所有组合。

您可以使用条件聚合来实现这一点:

select sum(tag = 'foo' and entryId = 0) as "tag=foo, entryID=0",
       sum(tag = 'foo' and entryId = 3) as "tag=foo, entryID=3",
       sum(tag = 'bar' and entryId = 3) as "tag=bar, entryID=0"
from t;
但是,通常的方法是将计数放在行中,而不是列中:

select tag, entryId, count(*)
from t
group by tag, entryId;

行的用途更广泛,因为您不必列出您可能想要匹配的所有组合。

您是否尝试过任何可以向我们展示的方法来让我们开始,或者您是否要求对工作进行报价?您事先知道标记和条目的值吗?如果是这样,您可以使用
条件聚合
。如果没有,您需要将该方法与
动态sql
相结合。类似于:您是否尝试过任何可以向我们展示的方法来帮助我们开始,或者您是否要求对工作进行报价?您事先知道标记和条目的值吗?如果是这样,您可以使用
条件聚合
。如果没有,则需要将该方法与
动态sql
相结合。类似于: