2014-09-23 251 views
0

我有一個關於MySQL的特定問題。請看看查詢和結果設置如下:MySQL SUM(),COUNT()和GROUP BY

SELECT `SentTo`, 
     `Read` 
FROM `Emails` as t 

[email protected] | 1 
-------------------------------- 
[email protected] | 0 
-------------------------------- 
[email protected] | 1 
-------------------------------- 
[email protected] | 0 
-------------------------------- 
[email protected] | 1 
-------------------------------- 

我想獲得的電子郵件對每封電子郵件的數量,總閱讀。我將通過減去總數讀取未讀,並在腳本一側閱讀,在這裏不需要它。

Email    | Total | Read 
-------------------------------------- 
[email protected] | 3 | 1 
-------------------------------------- 
[email protected] | 2 | 1 
-------------------------------------- 

有什麼建議嗎?我試圖應用子查詢,但我找不到合適的解決方案。

回答

3

這應該工作使用GROUP BY

SELECT `SentTo`, 
     COUNT(*) Total, 
     SUM(`Read`=0) 
FROM Emails 
GROUP BY `SentTo` 
+0

'SUM(Read = 0)'一個真正的Mysql解決方案條件計數+1 – 2014-09-23 05:20:11

0

集團通過應該得到期望的結果

SELECT sentTo, 
     Sum(READ) AS TotalRead, 
     Sum(CASE WHEN READ =0 THEN 1 ELSE 0) AS Unread 
FROM Emails 
GROUP BY sentTo 
+0

這將'SUM'讀取列,而不是'SUM',當它等於0.此外,'Read'是MySql中的保留字,需要轉義。 – sgeddes 2014-09-23 03:56:39

+0

當讀數爲1時,OP需要數值,正如您在第一封電子郵件有3個讀數的示例中所看到的那樣 – radar 2014-09-23 03:57:48

+0

這就是Total,它是COUNT(*)'。例如,hello有3條記錄,但只有1條記錄= 0。此查詢返回hello 2 – sgeddes 2014-09-23 04:00:25

1

子句的 '按組' 可以解決這個問題如下:

SELECT `SentTo`, COUNT(*) as totalSend, (totalSend - SUM(`Read`)) as totalUnread 
FROM `Emails` 
GROUP BY `SentTo` 
+1

除了事實這是無效的語法,它不產生如果它是正確的結果...首先,你不能像這樣在'SELECT'查詢中引用列別名。第二,'COUNT(DISTINCT SentTo)'將始終等於1 - OP要求'COUNT(*)'... – sgeddes 2014-09-23 04:33:59

+0

@sgeddes - 謝謝隊友。它已更新。 – 2014-09-23 05:25:57