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
更改为 name
。 GROUP 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)
。
我在从数据库中选择内容时遇到问题。这是 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
更改为 name
。 GROUP 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)
。