0

我查看了所有文档,但在将这个查询放在 Sequel 中时遇到了问题。

select a.*, IFNULL(b.cnt, 0) as cnt FROM a LEFT OUTER JOIN (select a_id, count(*) as cnt from b group by a_id) as b ON b.a_id = a.id ORDER BY cnt

将表 A 视为产品,表 B 是表明 A 已购买的记录。

到目前为止,我有:

A.left_outer_join(B.group_and_count(:a_id), a_id: :id).order(:count)

本质上,我只想对表 B 进行分组和计数,并将其与 A 连接,但由于 B 不一定有 A 的任何记录,并且我按 B 中的数字对其进行排序,因此我需要默认一个值。

4

2 回答 2

3
DB[:a].
  left_outer_join(DB[:b].group_and_count(:a_id).as(:b), :a_id=>:id).
  order(:cnt).
  select_all(:a).
  select_more{IFNULL(:b__cnt, 0).as(:cnt)}
于 2012-09-20T17:16:40.093 回答
-2

我可以在 MS SQL 语法方面为您提供帮助。

假设您的表是产品和订单。

CREATE TABLE Product (
  Id INT NOT NULL,
  NAME VARCHAR(100) NOT NULL)

CREATE TABLE [Order] (
  Id INT NOT NULL,
  ProductId INT)

INSERT INTO Product (Id, Name) VALUES
(1, 'Tea'), (2, 'Coffee'), (3, 'Hot Chocolate')

INSERT INTO [Order] (Id, ProductId) VALUES
(1, 1), (2, 1), (3, 1), (4, 2)

此查询将给出每个产品的订单数,包括没有任何订单的订单数。

SELECT p.Id AS ProductId,
       p.Name AS ProductName,
       COUNT(o.Id) AS Orders
FROM Product p 
         LEFT OUTER JOIN [Order] o
           ON p.Id = o.ProductId
GROUP BY
       p.Id,
       p.Name
ORDER BY
       COUNT(o.Id) DESC
于 2012-09-19T22:18:16.687 回答