查询在mysql中解决

时间:2012-12-21 14:38:35

标签: mysql sql

我的表格有这样的数据

id    from
1    1|Chinmoy Panda|chinmoy|mfsi_chinmoyp
1    532|Narendra Mallik|narendram
1    595|Bhagirathi Panda|bhagirathi

2    1|Chinmoy Panda|chinmoy|mfsi_chinmoyp
2    532|Narendra Mallik|narendram
2    595|Bhagirathi Panda|bhagirathi
2    13|Hemendra Singh|hemendras

3    1|Chinmoy Panda|chinmoy|mfsi_chinmoyp
3    595|Bhagirathi Panda|bhagirathi
3    13|Hemendra Singh|hemendras

4    1|Chinmoy Panda|chinmoy|mfsi_chinmoyp 
4    595|Bhagirathi Panda|bhagirathi

5    595|Bhagirathi Panda|bhagirathi

我正在尝试这个

  1. 忽略每个ID的第一行
  2. 算上w.r.t.从
  3. 如果ID有一行,请忽略。
  4. 意味着

    Count     from
    4         595|Bhagirathi Panda|bhagirathi
    2         532|Narendra Mallik|narendram
    2         13|Hemendra Singh|hemendras
    

    在1,2,3,4 id第1行包含chinmay panda。所以我忽略了那个

    Bhagirathi Panda发生了5次,但是id 5只有一行,所以计数是4。 同样适用于其他人

    我试过但无法找到结果

    请帮我写一下查询

    (我没有得到标题,所以我写这个。)

    提前感谢。

2 个答案:

答案 0 :(得分:3)

你想要一个像这样的查询:

select count(*), from
from t
where left(from, 2) <> '1|' and
      t.id in (select id from t group by id having COUNT(*) > 1)
group by from

但是,由于列名称命名很差(使用SQL保留字),因此需要正确引用它们。

此外,我假设“首先”是指以“1 |”开头的那些。

答案 1 :(得分:0)

此查询将执行

SELECT 
  COUNT(*) `count`,
  `from`
FROM (
  SELECT 
    `from`,
    IF( COALESCE( @id, 0 ) = (@id := id) , @curRow := @curRow + 1, @curRow := 1 ) curRow
  FROM
    Table1 ) tmp
WHERE curRow > 1
GROUP BY `from`
ORDER BY `count` desc

SQL Fiddle DEMO