2012-12-20 53 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。这带来了很多结果。避免它,并始终使用连接。