当前位置: 首页 > 面试题库 >

带count子查询,内部联接和组的查询

夔光霁
2023-03-14
问题内容

我绝对是SQL的新手,我一直在努力用Postgresql中的以下表结构编写一个复杂的查询:

CREATE TABLE reports
(
  reportid character varying(20) NOT NULL,
  userid integer NOT NULL,
  reporttype character varying(40) NOT NULL,  
)

CREATE TABLE users
(
  userid serial NOT NULL,
  username character varying(20) NOT NULL,
)

查询的目的是获取每个用户的报告类型数量,并将其显示在一列中。有三种不同类型的报告。

使用group-by的简单查询将解决问题,但将其显示在不同的行中:

select count(*) as Amount,
       u.username,
       r.reporttype 
from reports r,
     users u 
where r.userid=u.userid 
group by u.username,r.reporttype 
order by u.username

问题答案:
SELECT
  username,
  (
  SELECT 
    COUNT(*)
  FROM reports 
  WHERE users.userid = reports.userid && reports.reporttype = 'Type1'
  ) As Type1,
  (
  SELECT 
    COUNT(*)
  FROM reports 
  WHERE users.userid = reports.userid && reports.reporttype = 'Type2'
  ) As Type2,
  (
  SELECT 
    COUNT(*)
  FROM reports 
  WHERE users.userid = reports.userid && reports.reporttype = 'Type3'
  ) As Type3
FROM
  users
WHERE 
  EXISTS(
    SELECT 
      NULL
    FROM 
      reports
    WHERE 
       users.userid = reports.userid
  )


 类似资料:
  • 在第二个选择,它说“'select'意外”

  • 我有一个使用TypeORM包与Postgres SQL交互的nestjs应用程序。 我有下面的代码, 对于键和用户实体,我需要将内部连接创建为 选择*FROM key INNER JOIN user ON key.id=user.“keyid”,其中user.“userid”=1; 如何使用typeorm编写等效的内部联接查询? 如何使用typeorm执行上面的SQL查询?

  • 问题内容: 对于开发人员何时使用联接而不是子查询是否有经验法则还是相同的? 问题答案: 取决于RDBMS。您应该比较两个查询的执行计划。 根据我对Oracle 10和11的经验,执行计划始终是相同的。

  • 我正在尝试从查询中获取剩余的元组。在本例中,course_id3和4来自courses,因为用户admin@没有使用这些(他们只使用了1和2)。当我尝试左联接时,表已经很好地联接了,查询也正常工作... 但这将返回课程1和2,而不是3和4

  • 我有两个联合查询,如下所示: 现在,我想在另一个查询中使用此联合。 当我运行它时,我得到ORA-00904:"P"."CUSTOMER_NO":无效的标识符。我需要将h1.customer_no加入到外部查询customer_no。 我看到过一些带有rank的查询,但我不太明白。如何将内部查询与外部查询连接起来? 提前感谢。

  • 问题内容: 我想知道,是否可以使用PostgreSQL将查询结果与自身连接? 问题答案: 您可以使用WITH来做到这一点: 或者通过创建一个包含查询的VIEW并加入该查询: 还是蛮力的方法:两次键入子查询: