2017-10-05 177 views
0

從這個查詢:查詢GROUP BY和ORDER BY

SELECT 
    v.idutente AS idutente, 
    vl.idvideo AS idvideo, 
    (vl.likeY-vl.unlikeY) AS sott 
FROM video_likeunlike AS vl 
LEFT OUTER JOIN video AS v 
ON vl.idvideo = v.ID 
WHERE status = '1' 

我從表

idutente idvideo likeY  unlikeY sott 
------------------------------------------------ 
1    70  2   5   -3 
2    81  6   10  -4 
1    52  200   198  2 
1    54  30   2   28 
2    67  20   5   15 
3    22  12   0   12 

這個數據,我需要這樣的結果,有可能嗎?

idutente likeY  unlikeY sott 
------------------------------------------------ 
1   232   205  27 
2   26   15   11 
3   12   0   12 

我嘗試此查詢

SELECT 
    v.idutente AS idutente, 
    vl.idvideo AS idvideo, 
    vl.likeY as likeY, 
    vl.unlikeY as unlikeY, 
    (vl.likeY-vl.unlikeY) AS sott 
FROM video_likeunlike AS vl 
LEFT OUTER JOIN video AS v 
ON vl.idvideo = v.ID 
WHERE status = '1' 
GROUP BY v.idutente 
ORDER BY sott DESC 
+0

您正在使用2臺在您嘗試查詢,但你僅列1中的問題表。 – wast

+0

請參閱:[爲什麼我應該爲我認爲是非常簡單的SQL查詢提供一個MCVE?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve -for - 什麼 - 似乎對我將要-A-極簡單的SQL查詢) – Strawberry

回答

3

請對選擇列使用聚合SUM()操作。查詢可修改爲:

SELECT v.idutente AS idutente, 
     vl.idvideo AS idvideo, 
     SUM(vl.likeY) AS likeY, 
     SUM(vl.unlikeY) AS unlikeY, 
     SUM(vl.likeY-vl.unlikeY) AS sott 
FROM video_likeunlike AS vl 
LEFT OUTER JOIN video AS v ON vl.idvideo = v.ID 
WHERE status = '1' 
GROUP BY v.idutente 
ORDER BY sott DESC 
1

看起來你要使用的SQL sum()功能

SELECT 
    v.idutente AS idutente, 
    sum(vl.likeY) as likeY, 
    sum(vl.unlikeY) as unlikeY, 
    sum(vl.likeY)-sum(vl.unlikeY) AS sott 
FROM video_likeunlike AS vl 
LEFT OUTER JOIN video AS v 
ON vl.idvideo = v.ID 
WHERE status = '1' 
GROUP BY v.idutente 
ORDER BY sott DESC 
1
SELECT idutente, 
    SUM(likeY) likeY, 
    SUM(unlikeY) unlikeY, 
    SUM(sott) sott 
FROM mytable 
GROUP BY idutente 
ORDER BY sott DESC 

嘗試在SQL Fiddle

0

將您的第一個查詢用作子查詢並執行group by。

查詢

SELECT t.idutente, SUM(t.likeY) as likeY, SUM(t.unlikeY) as unlikeY from(
    SELECT 
     v.idutente AS idutente, 
     vl.idvideo AS idvideo, 
     vl.likeY, 
     vl.unlikeY, 
     (vl.likeY-vl.unlikeY) AS sott 
    FROM video_likeunlike AS vl 
    LEFT OUTER JOIN video AS v 
    ON vl.idvideo = v.ID 
    WHERE status = '1' 
) t 
GROUP BY t.idutente 
ORDER t.sott desc;