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

私はMSSQL構文であなたを助けることができます。

テーブルがProductとOrderであるとしましょう。

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 に答える