亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

PHP 在獨特情況下通過多個條件進行分組

PHP 在獨特情況下通過多個條件進行分組

PHP
哈士奇WWW 2022-09-25 20:25:04
我正在處理由另一個部門管理的數據,并且我得到了重復的數據。有 3 種不同的唯一標識:Order NumberCompany NameCompany Entity有時它是相同的公司名稱,但訂單號不同。有時它是相同的公司名稱,但不同的公司實體。有時它是相同的訂單號,但不同的公司名稱。有時它是相同的訂單號,但不同的公司實體。有時它是相同的公司實體,但訂單號不同。有時它是相同的公司實體,但不同的公司名稱。有時公司名稱縮寫為蘋果,蘋果公司,蘋果紐約等。下面我有一個包含示例數據的表格:CompanyName      CompanyEntity   OrderNumber   Apple            123             555123            Apple            123             555123         Telsa            888             444444         Telsa            777             222222         Apple NYC        103             544523       Stack            222             511523                  Stack            222             144523       我需要按公司名稱或公司實體或訂單號進行分組。我試過了: $query = "SELECT nextgenorders2.nextgenorder_ordernumber, nextgenorders2.nextgenorder_serial, nextgenorders2.nextgenorder_company_entity, nextgenorders2.nextgenorder_companyname, nextgenorders2.nextgenorder_deliverydate, FROM nextgenorders2 WHERE nextgenorders2.nextgenorder_deliverydate='2020-11-11'  GROUP BY nextgenorders2.nextgenorder_companyname,          nextgenorders2.nextgenorder_company_entity,           nextgenorders2.nextgenorder_ordernumber ";該查詢將生成:CompanyName      CompanyEntity   OrderNumber   Apple            123             555123            Telsa            888             444444         Telsa            777             222222         Apple NYC        103             544523       Stack            222             511523                  如果該行具有相同的公司名稱、公司實體和訂單號,則會將其放入一個組中。如果該行沒有相同的公司實體、公司名稱和訂單號,則不會將其放入組中。我希望查詢生成以下內容:CompanyName      CompanyEntity   OrderNumber   Apple            123             555123                Telsa            888             444444                           Stack            222             144523       但是我會采取這個,因為多個公司名稱縮寫:CompanyName      CompanyEntity   OrderNumber   Apple            123             555123                    Telsa            777             222222         Apple NYC        103             544523       Stack            222             511523      
查看完整描述

1 回答

?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

你可以做這樣的事情


但是對于您擁有的每一列,請決定如何處理它。像MIN(n2.nextgenorder_company_entity),但如果你想保留所有你可以使用GROUP_CONCAT例如


CREATE TABLE nextgenorders2

    (`nextgenorder_companyname` varchar(9), `nextgenorder_company_entity` int, `nextgenorder_ordernumber` int, nextgenorder_deliverydate date)

;


INSERT INTO nextgenorders2

    (`nextgenorder_companyname`, `nextgenorder_company_entity`, `nextgenorder_ordernumber`,nextgenorder_deliverydate)

VALUES

    ('Apple', 123, 555123,'2020-11-11'),

    ('Apple', 123, 555123,'2020-11-11'),

    ('Telsa', 888, 444444,'2020-11-11'),

    ('Telsa', 777, 222222,'2020-11-11'),

    ('Apple NYC', 103, 544523,'2020-11-11'),

    ('Stack', 222, 511523,'2020-11-11'),

    ('Stack', 222, 144523,'2020-11-11')

;

?


?

SELECT

 GROUP_CONCAT(n2.nextgenorder_ordernumber),

 #n2.nextgenorder_serial,

 MIN(n2.nextgenorder_company_entity),

 n2.nextgenorder_companyname,

 n2.nextgenorder_deliverydate

 FROM 

    (SELECT REPLACE(`nextgenorder_companyname`,'Apple NYC','Apple') `nextgenorder_companyname`

    , `nextgenorder_company_entity`, `nextgenorder_ordernumber`,nextgenorder_deliverydate

    FROM nextgenorders2) n2

 WHERE n2.nextgenorder_deliverydate='2020-11-11' 

 GROUP BY n2.nextgenorder_companyname

          ,n2.nextgenorder_deliverydate

          #,n2.nextgenorder_ordernumber

GROUP_CONCAT(n2.nextgenorder_ordernumber) | MIN(n2.nextgenorder_company_entity) | nextgenorder_companyname | nextgenorder_deliverydate

:---------------------------------------- | ----------------------------------: | :----------------------- | :------------------------

555123,555123,544523                      |                                 103 | Apple                    | 2020-11-11               

511523,144523                             |                                 222 | Stack                    | 2020-11-11               

444444,222222                             |                                 777 | Telsa                    | 2020-11-11               

db<>在這里


更多解釋


查詢的核心是


(SELECT REPLACE(`nextgenorder_companyname`,'Apple NYC','Apple') `nextgenorder_companyname`

, `nextgenorder_company_entity`, `nextgenorder_ordernumber`,nextgenorder_deliverydate

FROM nextgenorders2) n2

這替換了公司名稱,因此在這種情況下,Apple NYC成為Apple,這有點耗時,因此您應該考慮創建一個列母公司,但如果只有幾個,您可以像我一樣手動執行此操作。


Group By被簡化為只有公司名稱 ,因為這是我們的主要目標,要獲得有關該信息的所有信息,交貨日期就在那里,因為通常您會查找整個星期,因此如果您決定查看兩個或更多日期,它已經分組了。


選擇只是一個例子,因為不知道,你正在搜索什么,你的查詢沒有給我任何線索。


但是基數是針對每一列的,即不在 Group By 子句中,你需要一個聚合函數,以便開發人員必須決定每列他想要查看哪些數據。


在我的情況下,我決定查看所有訂單號,如果你只需要你采取的訂單數量計數。


該實體不在集團中,因為如果您只想從整體上看公司,我不明白為什么您需要任何實體,最小值只是因為您選擇了特斯拉777而不是888,但我不知道您需要它做什么


查看完整回答
反對 回復 2022-09-25
  • 1 回答
  • 0 關注
  • 133 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號