繁体   English   中英

按分组列分组?

[英]Group by grouped column?

我有一个节点喜欢的表,看起来像这样:

lid nid uid type
1   23  3   like
2   23  1   like
3   49  3   dislike
4   11  6   like

lid =该表的唯一ID,nid =“节点”(内容)ID,uid =用户ID,类型不言自明。

使用此查询:

SELECT nid, COUNT(lid) AS score, type
FROM node_likes
INNER JOIN users ON node_likes.uid = users.uid
GROUP BY nid, type

我可以获得每个节点的喜欢和不喜欢的分数。 内部连接无关紧要; 有些(不喜欢)来自不再存在的用户,这种加入是为了消除它们。

结果看起来像这样:

nid score type
307 4     like
307 1     dislike
404 24    like

然后,如何将查询按type分组,并为每种“喜欢”类型(喜欢/不喜欢)返回得分最高的节点ID?

就是

nid score type
404 24    like
307 1     dislike
SELECT
    SUBSTRING_INDEX(GROUP_CONCAT(nid ORDER BY likes DESC),',',1) as most_likes_nid,
    MAX(likes) as most_likes,
    SUBSTRING_INDEX(GROUP_CONCAT(nid ORDER BY dislikes DESC),',',1) as most_dislikes_nid,
    MAX(dislikes) as most_dislikes
FROM (
    SELECT 
        nid,
        COUNT(IF(type = 'like', 1, null)) as likes,
        COUNT(IF(type = 'dislike', 1 ,null)) as dislikes
    FROM node_likes
    GROUP BY nid 
) as t
    SELECT nid, COUNT(lid) AS score, type
    FROM node_likes
    INNER JOIN users ON node_likes.uid = users.uid
    GROUP BY nid, type        
    ORDER BY type DESC, score DESC; 

可能会成功。

尝试这个:

SELECT 
    nid, max(score) as score, type
FROM (
    SELECT nid, COUNT(lid) AS score, type
    FROM node_likes
    INNER JOIN users ON node_likes.uid = users.uid
    GROUP BY nid, type
) results
GROUP BY type
ORDER BY type DESC, score DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM