2016-11-28 139 views
1

我有一個「結算」表,它代表來自我的訂戶的所有帳單實例。訂戶可以有多個帳單。具有特定ID的行的數量,不包含SQL

我有一個簡單的SQL請求是:

SELECT count(billing_id),subscriber_id 
FROM billing 
    group by subscriber_id 

因此,我有我的所有用戶提供他們已經取得賬單數目的清單。 我想要列出所有沒有按用戶分組的帳單,但我希望先前請求的結果出現在每行中。

例子: 結果我以前的要求:

sub_id  nb_billings 
    1    3 
    2    2 

我想要什麼:

sub_id  nb_billings 
    1    3 
    1    3 
    1    3 
    2    2 
    2    2 

感謝

+2

爲什麼?這是奇怪的要求... – Rahul

回答

1

我會這樣做;

SELECT 
    b.subscriber_id 
    ,a.billing_count 
FROM billing b 
JOIN (SELECT subscriber_id, count(billing_id) billing_count FROM billing GROUP BY subscriber_id) a 
    ON b.subscriber_id = a.subscriber_id 

子查詢工作了BILLING_ID的計數的用戶,那麼這個連接到您的原始表中的所有行(使用subscriber_id)。這應該給你後面的結果。

+0

我想這是錯誤的。看到這裏 - > http://rextester.com/IUKAP28031。總數在5和6之間,遠高於表中的總行數。 –

+0

@SatwikNadkarny是什麼讓你相信這是錯的?它完全符合OP的要求(並已被OP接受)。從「我想列出所有賬單沒有按用戶分組」的問題來看,它沒有提到billing_id的分組。 –

+0

因爲您可以在鏈接中看到,結果顯示計數不正確。爲什麼用戶ID爲1的所有計數顯示爲5,用戶ID爲2的顯示爲6? –

1

您可以使用子查詢做到這一點:

SELECT 
    (SELECT count(t2.billing_id) FROM billing t2 WHERE t2.subscriber_id = t1.subscriber_id), 
    t1.subscriber_id 
FROM billing t1 
+0

擔心這個查詢在大型數據集上的性能 – Rahul

+0

@Rahul U're沒錯,那麼op可以像** @ Rich Benner **的解決方案。 – Blank

+0

接受另一個答案,因爲它更加優化,但使用你的,因爲它清晰和容易(請求本身非常複雜,所以這個解決方案很容易設置) –

-1
select subscriber_id,count(billing_id)over(partition by subscriber_id) 
from billing 

會做到這一點。

+0

你讀過這篇文章嗎?它的標籤爲'MySQL' – Rahul

1

我想這應該足夠了:

SELECT  s.subscriber_id, 
      s.billing_id, 
      s.TotalCount 
FROM  (
       SELECT  subscriber_id, 
          billing_id, 
          COUNT(billing_id) AS TotalCount 

       FROM  BILLING 
       GROUP BY subscriber_id, 
          billing_id 
      ) s 
GROUP BY s.subscriber_id, 
      s.TotalCount, 
      s.billing_id 

ORDER BY s.subscriber_id 

這應該給你的結果如下:

subscriber_id billing_id TotalCount 
1     10a   2 
1     10b   2 
1     10c   1 
2     10a   1 
2     10b   1 
2     10c   3 
2     10d   1 

這裏你可以看到這一點 - >http://rextester.com/AVVS23801

希望這有助於!

+0

我不認爲OP希望它通過billing_id和subscriber_id來分組。 –

相關問題