我查看了所有文档,我在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中的数字对它进行排序,我需要默认一个值。 / p>
答案 0 :(得分:2)
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)}
答案 1 :(得分:-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