将两个选项组合成一个

时间:2015-09-24 13:06:13

标签: mysql sql select

我有几张桌子。我将尝试简化:Table_1 ID是唯一的。 Table_2 ID不是唯一的。 table_2存储table_1上一行的ID和一个值,例如,结果为:

select t1.id, count(*)
from table_1 t1
group by t1.id

id | count
----------
1  | 2
3  | 1

我想计算table_2上每个ID的数量,所以我做

select t1.id, t1.A, t2.B
from table_2 t2
left join table_1 t1
on t1.id = t2.id

ID | A | B
----------
1  | a | x
1  | a | y
3  | c | z

我想列出table_2上的每一行及其在table_1.A上的相应值,所以我这样做

ID | A | B | count
------------------
1  | a | x | 2
1  | a | y | 2
3  | c | z | 1

有没有办法将这两个选项组合成一个,得到这样的结果?

<div id="headerwrap" name="home">
    <ul class="cb-slideshow">
         <li><span>Image 01</span>
            <div><h3></h3></div></li>
         <li><span>Image 02</span>
            <div><h3></h3></div></li>
         <li><span>Image 03</span>
           <div><h3></h3></div></li>
         <li><span>Image 04</span>
           <div><h3></h3></div></li>
         <li><span>Image 05</span>
           <div><h3></h3></div></li>
         <li><span>Image 06</span>
           <div><h3></h3></div></li>
     </ul>
 <header class="clearfix"> 
<div id="homepagelogo"> </div>

2 个答案:

答案 0 :(得分:1)

您可以通过加入count结果来合并结果。

Fiddle with sample data

select t1.id, t1.A, t2.B, x.cnt as count
from  t2
left join t1
on t1.id = t2.id
join (select t2.id, count(*) as cnt
from  t2
group by t2.id
) x
on x.id = t1.id

答案 1 :(得分:1)

除了@vkp发布的通用派生表解决方案之外,您还可以使用标量子查询返回单个值:

select t1.id, t1.A, t2.B, 
 (select count(*)
  from  t2 as x
  where x.id = t2.id
) cnt
from  t2

http://www.sqlfiddle.com/#!9/07a3a/6