选择其中一行

时间:2016-04-25 00:45:24

标签: mysql sql select

SELECT 
    v.ID, 
    v.PhotoID, 
    COUNT(*) AS Cnt, 
    p.PhotoWidth, 
    p.Dir 
FROM `views` v
JOIN `photos` p 
    ON v.PhotoID = p.ID
GROUP BY v.PhotoID DESC 
ORDER BY Cnt DESC

我有上面的MySQL命令。这很好用,但在Photo表中,每张照片都链接到一个目录ID。

我现在想要的只是每个Dir id的一行。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

您需要删除其他列。您需要将聚合函数应用于除了目录ID之外的所有列,如下所示。如果您需要其他列将聚合函数应用于所有列,例如count。我使用1而不是*来提高查询性能。

SELECT 
    COUNT(1) AS Cnt, 
    p.Dir 
from `photos` p 

GROUP BY p.Dir DESC 
ORDER BY Cnt DESC

更新

因此,如果您希望获得带有大多数观看次数的photoID,那么以下查询将会很有帮助。

SELECT 
    p.ID, 
    v.CountRec AS Cnt

FROM `photos` p 
join 
(select PhotoID, count(1) CountRec from `views` group by PhotoID) v
    ON p.ID= v.PhotoID
ORDER BY Cnt DESC