sql - 当您只需要计算某些项目时,按数量排序

标签 sql mysql

我有这个查询:

SELECT tips.* 
FROM   `tips` `t` 
       LEFT JOIN tip_usage 
         ON tip_usage.tip_id = t.id 
GROUP  BY t.id 
ORDER  BY COUNT(CASE 
                  WHEN status = 'Active' THEN status 
                  ELSE NULL 
                END) DESC 

正如您在此处看到的,我使用左联接,并且仅计算事件的记录

我可以使这个查询变得不同,并从计数中丢失案例内容吗?

最佳答案

如果您想返回所有提示,无论状态如何,但按事件记录数排序,那么这就是您将获得的结果。

如果您只想返回事件提示,则可以添加 Where status = 'Active',然后只需按 Count(t.id) desc 进行排序。

一种替代方法是,您在 Tips 表中有一个 NumActive int 列,并且每当为给定 Tip 添加或修改新的tip_usage 记录时,您都会保留此更新。这会给tip_usage的插入/删除/更新操作带来更多开销,但会使这个查询变得更简单:

select *
from tips
Order by tips.NumActive desc

另一种选择是:

Select tips.*
From tips
Order by (
  Select count(tip_id) 
  From tips_usage as t 
  Where t.tip_id = tips.id and status = 'Active') DESC

尽管这将大小写交换为子查询,但只是以不同的方式复杂。

关于sql - 当您只需要计算某些项目时,按数量排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4816139/

相关文章:

mysql - 将mysql查询从一个时期扩展到多个时期

sql - 不是独立地连接多个表,而是使用单独的查询?

php - Laravel 在 MySQL 中的 JSON 字段的帮助下创建 API 返回

PHP 总是正确插入数据,但一旦失败并插入重复数据?

sql - 对 Group 的 mysql 查询失败

用于获取员工活跃到不活跃之间的转换天数的 SQL 查询

mysql - 数据库规范化(1NF 到 3NF)

java - java中批量插入只取一个查询,无法取所有查询

mysql - Visual Studio 2013 MySQL 模块安装失败

sql - 如何将 Microsoft SQL 字段设置为标识,但以特定数字开始?