2013-12-08 90 views
-2

我有3個表:SQL - 我的查詢不工作

  1. 藝術(OID,主題型)
  2. 藝術家(援助,名)
  3. 藝術(oart(作爲一個外鍵oid),作者(作爲援助的外鍵))

因此,我必須找到藝術家的主題和藝術家數量,以最少的藝術家數量爲每種藝術類型。

我寫了以下內容,但顯然它不起作用。有誰能夠幫助我?

SELECT o.subject, COUNT(au.autor) count 
FROM Artistic au, Art o 
WHERE o.oid=au.autor 
GROUP BY o.type 
HAVING count = (SELECT MIN(count) FROM Artistic au); 
+0

你是什麼意思*不工作*?你會得到一個錯誤 - 如果是的話**什麼**錯誤?你沒有得到預期的結果嗎?然後請向我們展示源數據,您期望得到的內容以及您真正獲得的內容。我們看不到您的屏幕,也不能閱讀您的想法 - 您需要提供信息,以便我們提供幫助! –

+0

對不起,你是對的,我不得不提供更多信息。我使用了連接語法,現在它正在工作。不管怎麼說,還是要謝謝你 ! –

回答

0

只是使用計算列而不是ALIAS。
的使用也適當加入語法

SELECT o.subject, 
     COUNT(au.autor) count 
FROM Artistic au 
     INNER JOIN Art o 
      ON o.oid = au.autor 
GROUP BY o.type, o.subject 
HAVING COUNT(au.autor) = (SELECT MIN(count) FROM Artistic au) 
+0

我已經試過這個..但它仍然不工作.. –

+0

我更新了答案。您還需要在'GROUP BY'子句中包含'o.subject'。如果聲明的結果不是您期望的結果,請提供樣本記錄和您期望的結果,以便我們能夠處理它。謝謝。 –

0

您的問題是:「我一定要找到對象和藝術家與藝術家的最小數量的每一個藝術類型的數量」。

這種類型的查詢在MySQL中有點痛苦。您需要彙總typesubject,然後選擇具有最小計數的subject。這需要額外的join操作:

SELECT ts.`type`, ts.subject, ts.count 
FROM (SELECT a.`type`, a.subject, COUNT(au.autor) as `count` 
     FROM Artistic au join 
      Art a 
      on a.oid = au.autor 
     GROUP BY a.`type`, a.subject 
    ) ts join 
    (select a.`type`, min(`count`) as mincount 
     from (SELECT a.type, a.subject, COUNT(au.autor) as `count` 
      FROM Artistic au join 
       Art a 
       on a.oid = au.autor 
      GROUP BY a.type, a.subject 
      ) ts 
     group by a.`type` 
    ) t 
    on t.`type` = ts.`type` 
ORDER BY `count` desc;