如何在magento 2中使用Group By和Having Clause SQL查询?

Magento Group By SQL 查询用于从指定列中获取相同的值集。虽然我们使用带有聚合函数的 group by 子句

我们必须使用Having子句,并且不能将where子句与Group By Aggregrate 函数一起使用。

聚合函数,如 MIN、MAX、COUNT、AVG、SUM 等……

让我们举个例子,从customer_entity表中查找重复的电子邮件。

如果您将多个网站用作网站,则可能会出现重复的电子邮件。每个网站都有自己的电子邮件 ID,并且一个网站电子邮件不适用于其他网站。

在这里,我们将使用 group by 和 SQL 子句找到重复的电子邮件计数,

<?php declare(strict_types=1);

namespace Rbj\Customer\Model;

use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory;

class General
{
    /**
     * @var CollectionFactory
     */
    private $customerRepository;

    public function __construct(
        CollectionFactory $customerCollectionFactory
    ) {
        $this->customerCollectionFactory = $customerCollectionFactory;
    }

    public function findDuplicateEmail()
    {
        $customerCollection = $this->customerCollectionFactory->create();

        $customerCollection->getSelect()
            ->columns(['emailCount' => 'COUNT(e.entity_id)'])
            ->group('email')
            ->having('emailCount > ?', 1);
        return $customerCollection;
    }
}

这里我们在构造函数中添加了一个客户集合工厂来获取客户集合。

我们使用group() 子句和提供的电子邮件从 customer_entity 表中查找电子邮件字段。

我们使用having() 子句是因为我们在查询中使用了计数聚合。我们正在检查 emailCount 条件的 emailCount 是否可用超过 1。

赞(0)
微信
支付宝
微信二维码图片

微信扫描二维码打赏

支付宝二维码图片

支付宝扫描二维码打赏

相关文章

Please Login to comment