【问题标题】:Sqlite: single query with 2 different COUNT not using UNIONSqlite:具有 2 个不同 COUNT 的单个查询不使用 UNION
【发布时间】:2013-09-29 18:42:51
【问题描述】:

我有下表。

CREATE TABLE "questions" 
("counter" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE , 
 "questionid" INTEGER NOT NULL , 
 "chapter" INTEGER NOT NULL ,  
 "image" VARCHAR NOT NULL )

我想得到这个:

CHAPTER, NUMBER OF QUESTIONS IN CHAPTER, NUMBER OF IMAGES IN CHAPTER

我设法使用 UNION 获得了结果,但这不符合我上面的要求(即我的输出是 2 列,而不是 3 列)!

// First query: get only chapters with images, and count all questions
SELECT Q1.chapter as "chapterID with images", count(q1.image) as c1
FROM questions AS Q1
where q1.chapter IN (SELECT chapter from questions where image NOT LIKE "")
group by q1.chapter

UNION

// Second query: get only chapters with images and count only images
SELECT Q2.chapter as "chapterID with images", count(q2.image) as c2
FROM questions AS Q2
WHERE Q2.image NOT LIKE ""
group by q2.chapter

尝试使用单个查询我只能得到第一个 COUNT 或第二个,例如如下。

// NOT WORKING!
SELECT Q1.chapter as "chapterID with images", count(q1.image), count (q2.image)
FROM questions AS Q1, questions AS Q2
where q1.chapter IN (SELECT chapter from questions where IMAGE NOT LIKE "")
AND q1.counter= q2.counter
group by q1.chapter

非常感谢。

更新:解决方案

按照LS_dev建议的方法,我解决了如下。

我现在想从 2 个子查询中获取值并将它们分开(即图像/问题),但这不起作用,但我知道这是一个不同的问题...

SELECT chapter,     
 (SELECT COUNT(*) FROM questions WHERE chapter=Q1.Chapter AND image NOT LIKE "" ) as  "number of images",
 (SELECT COUNT(*) FROM questions WHERE chapter=Q1.Chapter) as "number of questions"
FROM questions AS Q1
WHERE chapter in (SELECT chapter from questions where IMAGE NOT LIKE "")
GROUP BY chapter

【问题讨论】:

  • UNION 总是添加行。 JOIN 添加列,但不适合您的问题。
  • 我知道,是的,但感谢您的评论。

标签: sql sqlite join count union


【解决方案1】:

这个问题最适合子查询,因为需要不同的计数:

 SELECT chapter, COUNT(),
    (SELECT COUNT() FROM questions WHERE chapter=q1.Chapter AND image NOT LIKE "")
    FROM question AS q1 GROUP BY chapter;

编辑:允许更多操作:

CREATE VIEW sums_view AS SELECT chapter, COUNT() AS question_count,
    (SELECT COUNT() FROM questions WHERE chapter=q1.Chapter AND image NOT LIKE "") AS image_count
    FROM question AS q1 GROUP BY chapter;

现在,以前的查询可以用作表:

 SELECT * FROM sums;

并且可能会进行一些道德操纵:

 SELECT *, image_count*100.0/question_count AS image_ratio FROM sums_view;

【讨论】:

  • 谢谢,您是否知道如何从 2 个子查询中获取值并将它们分开(即图像/问题)?
  • 为此,您最好创建一个视图并由他们操作。我会添加它来回答。
  • 我现在发现了一个错误。我会做一些更正和调整。
  • 我错过了GROUP BY,这使得第一个子查询不再需要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 2021-04-07
  • 2017-11-17
相关资源
最近更新 更多