Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

205
Views
MySQL 5.1 a 5.7 cambio de orden por ya no funciona

Tengo un problema con MySQL al crear una variable de contador SOrder basada en un orden establecido definido por order by. Estaba trabajando en MySQL 5.1 pero actualmente no en 5.7. La consulta original en 5.1 tenía el orden de las subconsultas y era aceptable para los estándares en ese entonces. En 5.7 con el modo only_full_group_by desactivado, agregué el orden por en el exterior, pero incluso cuando el orden por dentro de la subconsulta se comentó (o se ignoró de acuerdo con los estándares de SQL), generó SOrder como si fuera aleatorio pero no basado en Column Carrier, ANTERIOR, método de envío, modelo único.

 SELECT Carrier, PRIOR, ShipMethod, GroupOrder, @row_no:=IF(@prev_val = ANY_VALUE(t.SingleModel), @row_no, @row_no + 1) AS 'SOrder', SingleModel, COUNT(t.SingleModel) AS 'SingleModelTotQty', @prev_val:=ANY_VALUE(t.SingleModel) FROM (SELECT CASE WHEN ANY_VALUE(W.hdr_user_defined_field18) LIKE '%Fedex%' THEN 'FEDEX' ELSE 'UPS' END AS 'Carrier', CASE WHEN ANY_VALUE(W.hdr_user_defined_field20) IN ('16' , '26', '45', '88', '96') OR ANY_VALUE(W.hdr_user_defined_field20) IN ('19' , '21', '22', '23', '24', '44', '76', '77', '78') THEN 'PRIOR' ELSE 'NORM' END AS 'PRIOR', CASE WHEN ANY_VALUE(W.hdr_user_defined_field20) IN ('88' , '96', '80', '97') OR ANY_VALUE(W.hdr_user_defined_field20) IN ('76' , '77', '78', '79') OR ANY_VALUE(W.`Ship-To Location`) != '' THEN 'S2S' ELSE 'S2H' END AS 'ShipMethod', CASE WHEN SUM(Quantity) = 1 THEN 'Single' WHEN SUM(Quantity) > 1 AND COUNT(`PO Number`) = 1 THEN 'Multiple' WHEN COUNT(`PO Number`) > 1 THEN 'Mixed' END AS 'GroupOrder', CASE WHEN SUM(Quantity) = 1 THEN `Supplier Item Nbr` WHEN SUM(Quantity) > 1 AND COUNT(`PO Number`) = 1 THEN ' ' WHEN COUNT(`PO Number`) > 1 THEN ' ' END AS 'SingleModel', `PO Number` AS 'PONUM', CASE WHEN SUM(Quantity) = 1 THEN ' ' ELSE SUM(Quantity) END AS 'QtyPerMulPO' FROM dropship.Walmart_FullPOs W WHERE ProcessedDate = CURDATE() - 5 GROUP BY `PO Number` **ORDER BY Carrier , PRIOR DESC , ShipMethod , GroupOrder DESC , SingleModel DESC** ) t, (SELECT @row_no:=0) x, (SELECT @prev_val:='') y WHERE GroupOrder = 'Single' GROUP BY Carrier , PRIOR , ShipMethod , SingleModel ORDER BY t.Carrier , t.PRIOR DESC , t.ShipMethod , t.GroupOrder DESC , t.SingleModel DESC

ResultadoResultado

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Hay un problema con su sql_mode .

A partir de MySQL 5.7.x, el modo sql predeterminado incluye ONLY_FULL_GROUP_BY . (Antes de 5.7.5, MySQL no detecta la dependencia funcional y ONLY_FULL_GROUP_BY no está habilitado de manera predeterminada).

ONLY_FULL_GROUP_BY : se rechazarán las consultas de agrupación no determinista

Para más detalles consulte la documentación de sql_mode

Método 1:

Compruebe el valor predeterminado de sql_mode:

 SELECT @@sql_mode

Elimine ONLY_FULL_GROUP_BY de la consola ejecutando la siguiente consulta:

 SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Método 2:

Acceda a phpmyadmin para editar su sql_mode

  • Inicie sesión en phpmyadmin y abra localhost
  • Arriba en Variables presentes en la parte superior de los elementos del menú y busque el modo sql
  • Haga clic en el botón editar para eliminar ONLY_FULL_GROUP_BY y guardar configuración del modo sql en phpmyadmin
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!