2011-01-22 108 views
0

我想寫一個SQL語句將被其他表的結果中選擇一個表,並責令項目..我需要幫助寫一個複雜的SELECT語句

2個表是:

事件: ID,名稱

考勤: 用戶,事件

香港專業教育學院得到這個統計EMENT:

SELECT * 
FROM `attendance` 
WHERE event='1' 
    AND user IN (1,2,3,4,5,6,7,8,9,10,11,12,13,444,153) 

我使用它來獲取的朋友說來事件號碼1

現在我想這句話用另一個結合起來,創建選中的所有事件的聲明數量,並根據朋友的數量來排序... 我該如何寫這句話?

非常感謝,埃米爾。

回答

3

我會嘗試這樣的事:

SELECT 
    id, 
    name, 
    (SELECT COUNT(*) FROM attendance att WHERE att.event = ev.id) AS attending 
FROM 
    event ev 
ORDER BY 
    attending DESC 

不過,雖然我嘗試類似的東西,其實是我沒有,所以這可能無法正常工作的。

1

你也可以使用一個連接,如:

SELECT events.id, COUNT(attendance.user) AS attending 
FROM attendance INNER JOIN events ON attendance.event = events.id 
WHERE (attendance.user IN (1,2,3,4,5,6,7,8,9,10,11,12,13,444,153)) 
GROUP BY events.id 
ORDER BY attending DESC 
+0

工作perefectly ..謝謝! – Amir 2011-01-22 15:18:11

0

假設號碼列表是一組您感興趣的朋友(倒不如將它們存儲在一個表中 - 這就是你如何在數據庫中記錄的信息),則:

SELECT e.id, e.name, COUNT(*) AS friends 
    FROM attendance AS a 
    JOIN event  AS e ON a.event = e.id 
WHERE a.user IN (1,2,3,4,5,6,7,8,9,10,11,12,13,444,153) 
GROUP BY e.id, e.name; 

複雜性,當然,是在旁觀者的眼睛 - 這實際上不是複雜。請注意,正如所寫的,它沒有列出沒有任何朋友去往的事件。如果你想要的,你需要一個LEFT OUTER JOIN和你所需要的「朋友過濾器」比主WHERE子句前面:

SELECT e.id, e.name, COUNT(user) AS friends 
    FROM event AS e 
    LEFT OUTER JOIN 
     (SELECT user, event 
      FROM attendance 
     WHERE user IN (1,2,3,4,5,6,7,8,9,10,11,12,13,444,153) 
     ) AS a 
    ON a.event = e.id 
GROUP BY e.id, e.name; 

的COUNT(用戶)合計返回零如果一個組中的所有行包含NULL在用戶列中。

未經測試的SQL。

+0

也工作得很好,但我不知道我需要填寫表以測試它的效率......謝謝! – Amir 2011-01-22 15:19:04