使用group by和count连接两个表

时间:2018-04-18 04:47:14

标签: mysql sql

您好我有用户和交易表,下面是这些表的结构。

用户表

用户名,transactioncode是字段

交易表

rolename,transactioncode是字段

我必须从User表获取用户名,事务代码,并且这两个字段的组合应该是不同的,并且应该从事务表中获取该特定事务代码的rolename计数。

以下是我的查询返回错误的计数:

select u.username,u.transactioncode,count(t.rolename) 
from user u,transaction t 
where u.transactioncode=t.transactioncode 
group by u.username,u.transactioncode;

3 个答案:

答案 0 :(得分:1)

首先使用正确的显式join语法,其他使用distinct

select u.username,u.transactioncode,count(distinct t.rolename) roles
from user u 
inner join transaction t on u.transactioncode=t.transactioncode 
group by u.username, u.transactioncode;

另外,您也可以使用子查询

select username, transactioncode, 
      (select count(distinct rolename) from Transaction 
       where transactioncode = u.transactioncode) as roles
from user u;

但是,distinct在这里可能是多余的,但我不知道你的表是什么样子以及进入的是什么数据。

您还可以先与join

进行汇总和user
select u.username, u.transactioncode, t.roles  
from (select transactioncode, count(distinct rolename) roles
      from Transaction t
      group by transactioncode) t 
inner join user u on 
           u.transactioncode = t.transactioncode;

答案 1 :(得分:-1)

请试试这个

select u.username,u.transactioncode,count(t.rolename) 
from user u inner join transaction t 
on u.transactioncode=t.transactioncode 
group by u.username,u.transactioncode;

答案 2 :(得分:-1)

da = New OleDbDataAdapter("Select * from HAPostingHighAmount where User='" & txtUser.Text & "' UNION ALL Select * from LAPostingLowAmount where User='" & txtUser.Text & "'", con)