2012-12-20 54 views
1

我想獲得一個項目組的圖片數量,但似乎無法得到乘法工作與別名分配。我已經嘗試了一些修改下面的腳本,但我已經嘗試過的每一件事情都無法正常工作。MySQL - 別名乘以列

SELECT s.pid AS 'ID', 
     CONCAT_WS(', ', p.lastname, p.firstname) AS 'Name', 
     CONCAT(s.date, ' ', s.time) AS Serviced, 
     p.institution AS Facility, 
     s.description AS 'description title', 
     (SELECT COUNT(*) 
      FROM series se 
     WHERE se.studyid = s.id) 
      AS numseries, 
     (SELECT COUNT(*) 
      FROM image i 
     WHERE i.seriesid = se.id) 
      AS serimages, 
     numseries * serimages AS 'Number of Images' 
    FROM product p, 
      series se 
     JOIN 
      study s 
     ON s.pid = p.id 
GROUP BY s.id 
ORDER BY Serviced DESC 
+2

您不能引用在'SELECT'子句中別處定義的別名。這些只能在'ORDER BY'(或MySQL'HAVING')中引用 –

+0

具有結構的示例數據?所以我們可以測試 –

+4

@SaharshShah - 請停止讓人們接受你的答案。這很粗魯。 – ChrisF

回答

3

試試這個,我clobbed磁盤後

SELECT s.pid AS 'ID', 
     CONCAT_WS(', ', p.lastname, p.firstname) AS 'Name', 
     CONCAT(s.date, ' ', s.time) AS Serviced, 
     p.institution AS Facility, 
     s.description AS 'description title', 
     ((SELECT COUNT(*) 
      FROM series se 
     WHERE se.studyid = s.id) 
      * 
     (SELECT COUNT(*) 
      FROM image i 
     WHERE i.seriesid = se.id) 
     ), 
     AS 'Number of Images' 
    FROM product p, 
      series se 
     JOIN 
      study s 
     ON s.pid = p.id 
GROUP BY s.id 
ORDER BY Serviced DESC 
+0

只好做一個小小的改變,但是這讓我在需要去的地方 –

0

試試這個:

Select *, (numseries * serimages) as 'Number of Images' 
from (SELECT 
     s.pid AS 'ID', 
     CONCAT_WS(', ', p.lastname, p.firstname) AS 'Name', 
     CONCAT(s.date, ' ', s.time) AS Serviced, 
     p.institution AS Facility, 
     s.description AS 'description title', 
     (SELECT COUNT(*) FROM series se WHERE se.studyid = s.id) AS numseries, 
     (SELECT COUNT(*) FROM image i WHERE i.seriesid = se.id) AS serimages 
    FROM product p, series se 
    INNER JOIN study s ON s.pid = p.id 
    GROUP BY s.id 
    ORDER BY Serviced DESC 
) as a; 
0

嘗試使用它都該

SELECT 
    t.ID, 
    t.Name, 
    t.Serviced, 
    t.Facility, 
    t.title, 
    t.numseries, 
    t.serimages, 
    t.numseries * t.serimages AS 'Number of Images' 
FROM 
    (
    SELECT s.pid AS 'ID', 
      CONCAT_WS(', ', p.lastname, p.firstname) AS 'Name', 
      CONCAT(s.date, ' ', s.time) AS Serviced, 
      p.institution AS Facility, 
      s.description AS 'description title', 
      (SELECT COUNT(*) FROM series se WHERE se.studyid = s.id) AS numseries, 
      (SELECT COUNT(*) FROM image i WHERE i.seriesid = se.id) AS serimages  
    FROM product p, series se 
    JOIN study s ON s.pid = p.id 
    ) as t 
GROUP BY t.id 
ORDER BY t.Serviced DESC 

而且你是在USIG cartisin產品你的查詢我的意思是使用兩個表的FROM。這帶來了很多結果。避免它,並始終使用連接。