2016-04-05 28 views
1

Sütun 2'de sütun 1'de bir değerin kaç yinelemesinin göründüğünü sayabilmem için sorgularımı nasıl yapılandıracağım ve Aynı tabloda yeni bir sütun oluşturulsun mu? Böyle bir tablo olsaydı, örneğin (bir değer birinci sütunda yineleniyor Eğer hala yeni sütunda aynı değere depolamak istediğiniz):MySQL Başka bir sütundaki bir sütundaki bir değerin yinelenme sayısını sayma ve yeni sütunda saklama

COL1 COL2 
1  2 
1  4 
2  1 
3  1 
4  1 
4  2 

çıkan tablo aşağıdaki gibi görünecektir:

COL1 COL2 COL3 
1  2  3 
1  4  3 
2  1  2 
3  1  0 
4  1  1 
4  2  1 

Herhangi bir yardım için minnettarım! Şimdiden teşekkürler!

+0

Tanımladığınız mantığı herhangi bir şekilde nasıl izleyemiyorum? sunduğunuz sonuçlarla eşleşiyor. –

+0

@GordonLinoff, yukarıdaki örnekteki, sütun 1'deki değer 1, sütun 2'de 3 kez görünüyor, böylece sütun3, sütun 1'deki değer 1'e göre 3 sayısını depolayacaktır ... –

+1

Bunu neden yapmak istiyorsunuz? 1 'in col2'de üç kez gerçekleştiği bilgiler zaten var (bunu kolayca sayabilirsiniz). Öyleyse neden tablodaki tüm col1 = 1 kayıtlarında saklanmalı? Bu gelecekteki hatalara eğilimlidir (aniden, farklı sayılarla iki col1 = 1 kayıt olduğunda veya bir col1 = 1 kaydının gerçek sayıya uymayan bir sayımı olduğunda). Tavsiyem: Bunu yapma. –

cevap

1

Kolayca anında güvenebilirsiniz. Bunu gereksiz yere saklamayın. Bu sadece sorunlara neden olur.

select 
    col1, 
    col2, 
    (
    select count(*) 
    from mytable match 
    where match.col2 = mytable.col1 
) as col3 
from mytable; 

verdiğinizi düşünüyorsanız gerekir bunu; Burada uygun GÜNCELLEME ifadedir:

update mytable 
set col3 = 
(
    select count(*) 
    from mytable match 
    where match.col2 = mytable.col1 
); 
0

Bunu yapmak için, şunları deneyebilirsiniz:

SELECT COL1, COL2, (SELECT COUNT(COL1) FROM `tablename` AS t2 
WHERE t2.COL1 = t1.COL1) AS COL3 FROM `tablename` AS t1 

:)

0
Select 
col1, 
col2, 
COALESCE(col3,0) as col3 
FROM 
mytable 
LEFT JOIN 
(Select count(*) as col3, col2 
    from mytable 
    GROUP BY col2) as temp ON temp.col2 = mytable.col1 

Enjoy Ve güncelleştirme isterseniz (teşekkürler Thorsten Kettner) :

UPDATE mytable 
LEFT JOIN (Select count(*) as col3, col2 
    from mytable 
    GROUP BY col2) as temp ON temp.col2 = mytable.col1 
SET mytable.col3 = COALESCE(temp.col3,0) 
+0

Varolan olmayan değerler için NULL yerine 0'ı göstermek için COALESCE ekleyin. Bu, verileri seçmenin iyi bir yoludur, ancak yeni bir sütunun sayılarla nasıl doldurulacağı sorusuna gerçekten cevap vermez. Ve neyse: bir cevap sadece bir sorgudan daha fazlasını sağlamalıdır. –

+0

Evet cevabınıza +1 koyuyorum. Cevabım sırasında bazı işler yapıyordum;) Seçiminiz performans için benimkinden daha mı iyi? –

+0

Hayır, bilmiyorum. Tahmin etmem gerekirse, seninkilerin biraz daha hızlı olabileceğini düşünürdüm. –

İlgili konular