Select 来自 mysql 数据库的东西并按计数(在哪里)排序

Select something from mysql database and order it by count (where)

我在从数据库中选择内容时遇到问题。这是 sql 句子:

SELECT name 
FROM table1 
JOIN table2
ON table1.id=table2.advid 
GROUP BY advid 
ORDER BY COUNT(table2.likes) ASC

这将输出 name 最小值 table2.likes 到最大值 table2.likes

问题是 table2.likes 包含喜欢和不喜欢。在 table 中,喜欢用 1 标记,不喜欢用 2 标记。

目前,如果有...

...写在 table 中,语法将同时计算喜欢和不喜欢,因此结果为 6。我需要此结果为零,这意味着在计算时,不喜欢必须是从点赞数推算。这也意味着句子的这一部分:ORDER BY COUNT(table2.likes) ASC 必须更改,但我不知道如何更改。

SUM() 使用条件聚合:

SELECT name 
FROM table1 t1 JOIN
     table2 t2
     ON t2.id = t2.advid 
GROUP BY name
ORDER BY SUM(CASE WHEN t2.likes = 1 THEN 1 ELSE -1 END) ASC;

注意:我将 GROUP BY 更改为 nameGROUP BY 列应与您选择的列匹配。

使用 case 表达式计算喜欢为 1,不喜欢为 -1。不join再聚合,而是join已经聚合的数据,算是一种很好的风格,不容易出错。

select t1.name, t2.sumlikes
from table1 t1
join
(
  select advid, sum(case when likes = 1 then 1 else -1 end) as sumlikes
  from table2
  group by advid
) t2 on t2.advid = t1.id
order by sumlikes;

如果您也想列出不带相似条目的姓名,则将联接改为 left outer join 和 select coalesce(t2.sumlikes, 0)